具有可为空布尔值的 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 tag和takes_context=True
。我不相信可以编写一个过滤器来区分缺失变量和空字符串。
我需要将布尔变量传递给模板。要将其转换为 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 tag和takes_context=True
。我不相信可以编写一个过滤器来区分缺失变量和空字符串。