default_if_none在Django模板中有用吗?

时间:2011-05-12 00:06:41

标签: django django-templates

来自Django文档,

  

通常,如果变量不是   存在,模板系统插入   的价值   TEMPLATE_STRING_IF_INVALID设置,   设置为''(空字符串)   默认情况下。

     

应用于无效的过滤器   变量只会在以下情况下应用   TEMPLATE_STRING_IF_INVALID设置为   ''(空字符串)。如果   TEMPLATE_STRING_IF_INVALID设置为   任何其他值,变量过滤器将   被忽略了。

     

这种行为略有不同   对于if,for和regroup模板   标签。如果是无效变量   提供给其中一个模板   标签,变量将被解释   没有。始终应用过滤器   这些中的无效变量   模板标签。

如果无效变量总是被转换为'',对于 if for 重新组合以外的模板标签和过滤器,那么模板过滤器 default_if_none 有用吗?过时了吗?

2 个答案:

答案 0 :(得分:13)

无效变量与存在的变量之间存在差异,但其值为None

考虑以下背景:

{'apple':'green','banana':None}`

在您的模板中{{ apple }}解析为green,而{{ banana }}解析为None{{ orange }}解析为TEMPLATE_STRING_IF_INVALID

现在考虑{{ banana|default_if_none:'yellow' }},您应该看到使用default_if_none标记。

答案 1 :(得分:4)

这是我曾多次使用default_if_none的情况。我正在查询我无法控制的辅助数据库,并且我在模板中显示数据。大多数情况下数据看起来很好,但有时,数据值会显示None。在这种情况下,我将使用过滤器:

{{ data_value|default_if_none:"N/A" }}

网站的普通公众和用户通常不了解None值的含义,通过将其替换为更友好的字词,过滤器default_if_none就派上用场了。