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

Check if variable exists in template, without causing errors in loggers if it doesn't

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

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

{% if variable %}

这是在文档中提出的,questions询问如何检查变量是否存在被关闭为偏离主题并指向那个方向。

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

{$ if variable is not None %}

然而,在这两种情况下,虽然它在用户端工作正常,但记录器将其保存为 KeyError,使我的日志文件混乱。

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

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

我使用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}