如何在django模板中区分None
和False
?
{% if x %}
True
{% else %}
None and False - how can I split this case?
{% endif %}
发布于 2010-07-15 20:10:30
每个Django模板上下文contains True
, False
and None
。对于Django 1.10及更高版本,您可以执行以下操作:
{% if x %}
True
{% elif x is None %}
None
{% else %}
False (or empty string, empty list etc)
{% endif %}
Django1.9及更早版本不支持if
标记中的is
运算符。在大多数情况下,使用{% if x == None %}
是可以的。
{% if x %}
True
{% elif x == None %}
None
{% else %}
False (or empty string, empty list etc)
{% endif %}
在Django1.4和更早的版本中,你不能在模板上下文中访问True
,False
和None
,你可以使用yesno
过滤器。
在视图中:
x = True
y = False
z = None
在模板中:
{{ x|yesno:"true,false,none" }}
{{ y|yesno:"true,false,none" }}
{{ z|yesno:"true,false,none" }}
结果:
true
false
none
发布于 2010-07-15 19:44:23
您可以创建自定义过滤器:
@register.filter
def is_not_None(val):
return val is not None
然后使用它:
{% if x|is_not_None %}
{% if x %}
True
{% else %}
False
{% endif %}
{% else %}
None
{% endif %}
当然,你也可以调整过滤器来测试你喜欢的任何条件…
发布于 2012-01-09 18:58:47
对前面答案的增强可能是:
{% if x|yesno:"2,1," %}
# will enter here if x is True or False, but not None
{% else %}
# will enter only if x is None
{% endif %}
https://stackoverflow.com/questions/3259279
复制相似问题