default_if_none 在 Django 模板中有啥用吗?

Posted

技术标签:

【中文标题】default_if_none 在 Django 模板中有啥用吗?【英文标题】:Does default_if_none have any use in Django templates?default_if_none 在 Django 模板中有什么用吗? 【发布时间】:2011-08-23 17:42:53 【问题描述】:

来自 Django 文档,

一般来说,如果一个变量没有 存在,模板系统插入 的价值 TEMPLATE_STRING_IF_INVALID 设置, 设置为 '' (空字符串) 默认情况下。

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

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

如果一个无效的变量总是被翻译成'',对于除了 ifforregroup 之外的模板标签和过滤器,那么模板过滤器 default_if_none 好用吗?过时了吗?

【问题讨论】:

【参考方案1】:

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

考虑以下上下文:

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

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

现在考虑 banana|default_if_none:'yellow' ,您应该会看到default_if_none 标签的使用。

【讨论】:

【参考方案2】:

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

 data_value|default_if_none:"N/A" 

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

【讨论】:

当你想加入多个过滤器时要小心。例如:value|upper|default_if_none:"-"不行,你应该把:value|default_if_none:"-"|upper

以上是关于default_if_none 在 Django 模板中有啥用吗?的主要内容,如果未能解决你的问题,请参考以下文章

Django内置模版过滤器

模板默认语法无法识别

[django]在windows下搭建Django的虚拟环境

在 Django 的管理员上记录活动 - Django

django-在Django中选择文件后预览照片

在没有 django 表单的 django 模板上工作 [关闭]