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 中动态包含模板

如何从 python 代码中调用 django 模板标签?

Django模板中include的标签的使用

django模板的导入

django模板之继承标签extend和添加标签include

如何将 Django 的标记模板标签与 Google App Engine WebApp 框架一起使用