来自Django文档,
通常,如果变量不是 存在,模板系统插入 的价值 TEMPLATE_STRING_IF_INVALID设置, 设置为''(空字符串) 默认情况下。
应用于无效的过滤器 变量只会在以下情况下应用 TEMPLATE_STRING_IF_INVALID设置为 ''(空字符串)。如果 TEMPLATE_STRING_IF_INVALID设置为 任何其他值,变量过滤器将 被忽略了。
这种行为略有不同 对于if,for和regroup模板 标签。如果是无效变量 提供给其中一个模板 标签,变量将被解释 没有。始终应用过滤器 这些中的无效变量 模板标签。
如果无效变量总是被转换为'',对于 if , for 和重新组合以外的模板标签和过滤器,那么模板过滤器 default_if_none 有用吗?过时了吗?
答案 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
就派上用场了。