具有可为空布尔值的 Django 模板默认过滤器

Django template default filter with nullable boolean values

我需要将布尔变量传递给模板。要将其转换为 js 布尔值,您通常会这样做:

{{ boolval|yesno:'true,false' }}

现在我的 boolvar 可能不存在了。在那种情况下,我需要它默认为 true,所以我尝试这样做:

{{ boolval|default_if_none:'true'|yesno:'true,false' }}

没想到结果是false.

我正在尝试调试 {{ boolval|default_if_none:'true' }} 生成的内容,但出现语法错误。不确定发生了什么,但绝对不会产生 true.

如何使用过滤器实现我想要的行为?

我认为更简单直接的解决方案是{{ boolval|lower }}

没有额外的开销,工作正常。

default_is_none 仅在值为 None 时才使用给定值。如果模板上下文中缺少 boolval,则默认情况下它将计算为空字符串,这与 None.

不同

如果你不能确保boolval出现在模板上下文中,那么我建议你写一个simple tagtakes_context=True。我不相信可以编写一个过滤器来区分缺失变量和空字符串。