Django模板:False与None

时间:2010-07-15 19:36:17

标签: python django templates if-statement

如何在django模板中区分NoneFalse

{% if x %}
True 
{% else %}
None and False - how can I split this case?
{% endif %}

5 个答案:

答案 0 :(得分:12)

每个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 %}

Django 1.9及更早版本不支持is标记中的if运算符。大多数情况下,可以使用{% if x == None %}代替。

{% if x %}
True 
{% elif x == None %}
None
{% else %}
False (or empty string, empty list etc)
{% endif %}

使用Django 1.4及更早版本,您无权访问模板上下文中的TrueFalseNone,而是可以使用yesno过滤器。< / p>

在视图中:

x = True
y = False
z = None

在模板中:

{{ x|yesno:"true,false,none" }}
{{ y|yesno:"true,false,none" }}    
{{ z|yesno:"true,false,none" }}    

结果:

true
false
none

答案 1 :(得分:5)

您可以创建自定义过滤器:

@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 %}

当然,您可以调整过滤器以测试您喜欢的任何条件......

答案 2 :(得分:2)

以前答案的增强可能是:

{% 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 %}

答案 3 :(得分:0)

使用misc.context_processors.useful_constantsTrueFalse常量创建context_processor(或使用django-misc模块None)并使用{% if x == None %}或{ {1}}

{% if x == False %}

context_processor.py

答案 4 :(得分:0)

这是另一个棘手的方法:

{% if not x.denominator %}
    None
{% else %}
    {% if x %}
        True
    {% else %}
        False
    {% endif %}
{% endif %}

那是因为“None”没有属性“denominator”,而“True”和“False”都是1。