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

时间:2018-11-28 11:35:29

标签: django django-1.8

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

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

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

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

出乎意料的是,其结果是false

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

如何实现带有过滤器的行为?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

default_is_none仅在给定值为None时使用给定值。如果模板上下文中缺少boolval,则默认情况下它将评估为空字符串,该字符串与None不同。

如果不能确保模板上下文中存在boolval,那么建议您使用takes_context=True编写一个simple tag。我不认为有可能编写一个过滤器来判断缺失变量和空字符串之间的区别。