django 的模板标签“include”如何与 None 一起使用
Posted
技术标签:
【中文标题】django 的模板标签“include”如何与 None 一起使用【英文标题】:How django's template tag "include" work with None 【发布时间】:2016-04-17 10:28:08 【问题描述】:我在我的模板中使用了一个包含标签,如下所示:
% include fragment_variable %
其中 fragment_variable 是一个可能不存在的上下文变量。我想知道当 fragment_variable 不在上下文变量中或为 None 时是否会爆炸。
注意:实际上我在两个不同的环境中测试了这段代码(都使用 Django 1.7)并得到了两个不同的结果(一个因模板查找的堆栈跟踪而爆炸,另一个只是默默地失败)。所以我很好奇django中是否有一个设置可以控制“include”标签找不到有效模板时模板渲染的行为。
【问题讨论】:
通过对 Django 1.9 的快速测试,debug=True
时出现黄色错误页面,debug=False
时出现静默失败(即模板加载,并且没有迹象表明包含标签失败)。
抱歉,忘记说版本了。我目前正在开发 1.7
【参考方案1】:
% if fragment_variable %
% include fragment_variable %
% else %
<!-- something else -->
% endif %
编辑:
由于您使用的是 1.8 之前的 django 版本,请查看设置 TEMPLATE_STRING_IF_INVALID,它为无效变量设置了默认值。
也可以看看How invalid variables are handled:
一般情况下,如果变量不存在,模板系统会插入 引擎的 string_if_invalid 配置选项的值, 默认设置为 '' (空字符串)。
这种行为对于 if、for 和 regroup 略有不同 模板标签。如果向其中之一提供了无效变量 模板标签,变量将被解释为无。过滤器是 总是应用于这些模板标签中的无效变量。
就此而言,我仍然认为使用if
是最好的练习。
【讨论】:
我很好奇 include 在没有 if 条件检查的情况下如何工作。以上是关于django 的模板标签“include”如何与 None 一起使用的主要内容,如果未能解决你的问题,请参考以下文章
如何使用“include”标签在 Django 中动态包含模板