【问题标题】:How django's template tag "include" work with Nonedjango 的模板标签“include”如何与 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

标签: django django-templates


【解决方案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 条件检查的情况下如何工作。
猜你喜欢
  • 2012-09-22
  • 2011-06-25
  • 2013-10-04
  • 2016-03-31
  • 2016-10-22
  • 2022-11-25
  • 2014-03-20
  • 2019-08-07
  • 1970-01-01
相关资源
最近更新 更多