default_if_none在Django模板中有用吗?

tam*_*are 9 django django-templates

来自Django文档,

通常,如果变量不存在,模板系统会插入TEMPLATE_STRING_IF_INVALID设置的值,默认设置为''(空字符串).

仅当TEMPLATE_STRING_IF_INVALID设置为''(空字符串)时,才会应用应用于无效变量的过滤器.如果TEMPLATE_STRING_IF_INVALID设置为任何其他值,则将忽略变量过滤器.

对于if,for和regroup模板标记,此行为略有不同.如果为其中一个模板标记提供了无效变量,则该变量将被解释为None.过滤器始终应用于这些模板标记中的无效变量.

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

Wog*_*gan 13

无效变量与存在但具有值的变量之间存在差异None.

考虑以下背景:

{'apple':'green','banana':None}`
Run Code Online (Sandbox Code Playgroud)

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

现在考虑一下{{ banana|default_if_none:'yellow' }},您应该看到default_if_none标签的使用.


Thi*_*Lam 5

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

{{ data_value|default_if_none:"N/A" }}
Run Code Online (Sandbox Code Playgroud)

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