一种解决方案是将模板后端更改为jinja2(Django“本机”支持)following the documentation。
深入解释jinja2 django 后端如何处理undefined 变量问题,can be found here (注解我的):
无效的模板变量
当遇到无效变量时,您可以设置各种行为
在 Jinja 模板中。 Django 为 Jinja 设置了两种默认行为,一种
当DEBUG=True——开发中的常见设置——以及
other for when DEBUG=False -- 生产中的常见设置。
如果DEBUG=True 并且在 Jinja 模板中设置了无效变量,
Jinja 使用jinja2.DebugUndefined 类来处理它。这
jinja2.DebugUndefined 类逐字输出变量
渲染(例如,如果模板有 {{foo}} 语句和
上下文中不存在变量,Jinja 输出{{foo}},使得
更容易发现无效变量)。
如果DEBUG=False 并且在 Jinja 模板中设置了无效变量,
Jinja 使用jinja2.Undefined 类来处理它。这
jinja2.Undefined 类在
用于渲染的变量(例如,如果模板有 {{bar}} 语句
并且变量在上下文中不存在,Jinja 输出一个空白
空间)。 值得一提的是,最后一个行为与
Django 模板中无效变量的默认行为。
除了jinja2.DebugUndefined 和jinja2.Undefined 类之外,
Jinja 还支持jinja2.StrictUndefined 类。这
jinja2.StrictUndefined 类用于生成立即错误
而不是继续渲染,这有助于更快
无效变量的诊断。 但是,请注意最后一节课
根据DEBUG 变量更改其行为,它要么生成
带有无效变量名的堆栈错误(即DEBUG=True 时)或
它会生成一个标准的 HTTP 500 错误页面(即当 DEBUG=False 时)。
如果您想在模板上设置StrictUndefined 选项,可以使用以下示例from the same source:
清单 4-4。为 Jinja 中的无效变量生成错误
jinja2.StrictUndefined
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))
import jinja2
TEMPLATES = [
{
'BACKEND':'django.template.backends.jinja2.Jinja2',
'DIRS': ['%s/jinjatemplates/'% (PROJECT_DIR),],
'APP_DIRS': True,
'OPTIONS': {
'undefined':jinja2.StrictUndefined
},
}
]
如示例 4-4 所示,我们首先声明 import jinja2 以获得
在settings.py 访问 Jinja 的课程。接下来,我们声明
OPTIONS 参数中的未定义键并将其分配给 Jinja
类来处理无效变量。在这种情况下,我们使用
jinja2.StrictUndefined 类在无效模板时得到错误
遇到变量,但您同样可以使用其他任何变量
两个 Jinja 类来处理无效变量(即
jinja2.DebugUndefined 或 jinja2.Undefined)。
最后,如果您想在 DEBUG=True 或 DEBUG=False 之间有不同的行为,您可以在 TEMPLATES 设置中更改以下内容:
'OPTIONS': {
'undefined': jinja2.DebugUndefined if DEBUG else jinja2.StrictUndefined
},
利用 jinja2 的开发调试选项和生产的严格选项(引发问题中提到的错误)。