检查模板中是不是存在变量,如果不存在则不会在记录器中导致错误

Posted

技术标签:

【中文标题】检查模板中是不是存在变量,如果不存在则不会在记录器中导致错误【英文标题】:Check if variable exists in template, without causing errors in loggers if it doesn't检查模板中是否存在变量,如果不存在则不会在记录器中导致错误 【发布时间】:2020-02-12 04:31:31 【问题描述】:

我在LOGGINGsettings.py 中启用了'level': 'DEBUG'

我知道在模板中检查变量是否存在的建议解决方案是使用 if 模板标签

% if variable %

这是在文档中提出的,questions 询问如何检查变量是否存在已作为题外话关闭并指向该方向。

here 提供的另一个解决方案是与 None 进行比较。

$ if variable is not None %

然而,在这两种情况下,虽然它在用户端运行良好,但记录器将其保存为 KeyError,使我的日志文件变得混乱。

我怎样才能避免这种情况?

【问题讨论】:

【参考方案1】:

我使用 django 过滤器正确解决了这个问题:

myapp/templatetags/filters.py我加:

@register.simple_tag(takes_context=True)
def var_exists(context, name):
    dicts = context.dicts  # array of dicts
    if dicts:
        for d in dicts:
            if name in d:
                return True
    return False

html模板中:

% load filters %
...
% var_exists 'project' as project_exists %
% if project_exists %
  ...
% endif

【讨论】:

【参考方案2】:

您可以将名为 django.template 的记录器的日志级别设置为 INFO 或更高级别以禁用这些日志消息。

【讨论】:

在这种情况下,您将跳过模板中所有真正有意义的错误

以上是关于检查模板中是不是存在变量,如果不存在则不会在记录器中导致错误的主要内容,如果未能解决你的问题,请参考以下文章

替代监视器来检查记录是不是存在,如果不存在则写入

渲染前检查模板是不是存在

检查表1中是不是存在记录的优化方法。如果没有则检查表2,否则返回默认值

检查记录是不是存在,如果它确实加 1(在过程中)

sql:判断是不是存在相同记录,如果存在则改写,不存在则添加

检查容器中是不是存在 NaN