首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Django模板: False vs. None

Django模板: False vs. None
EN

Stack Overflow用户
提问于 2010-07-15 19:36:17
回答 5查看 5K关注 0票数 15

如何在django模板中区分NoneFalse

代码语言:javascript
运行
AI代码解释
复制
{% if x %}
True 
{% else %}
None and False - how can I split this case?
{% endif %}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-07-15 20:10:30

每个Django模板上下文contains True, False and None。对于Django 1.10及更高版本,您可以执行以下操作:

代码语言:javascript
运行
AI代码解释
复制
{% if x %}
True 
{% elif x is None %}
None
{% else %}
False (or empty string, empty list etc)
{% endif %}

Django1.9及更早版本不支持if标记中的is运算符。在大多数情况下,使用{% if x == None %}是可以的。

代码语言:javascript
运行
AI代码解释
复制
{% if x %}
True 
{% elif x == None %}
None
{% else %}
False (or empty string, empty list etc)
{% endif %}

在Django1.4和更早的版本中,你不能在模板上下文中访问TrueFalseNone,你可以使用yesno过滤器。

在视图中:

代码语言:javascript
运行
AI代码解释
复制
x = True
y = False
z = None

在模板中:

代码语言:javascript
运行
AI代码解释
复制
{{ x|yesno:"true,false,none" }}
{{ y|yesno:"true,false,none" }}    
{{ z|yesno:"true,false,none" }}    

结果:

代码语言:javascript
运行
AI代码解释
复制
true
false
none
票数 15
EN

Stack Overflow用户

发布于 2010-07-15 19:44:23

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

代码语言:javascript
运行
AI代码解释
复制
@register.filter
def is_not_None(val):
    return val is not None

然后使用它:

代码语言:javascript
运行
AI代码解释
复制
{% if x|is_not_None %}
    {% if x %}
        True
    {% else %}
        False
    {% endif %}
{% else %}
    None
{% endif %}

当然,你也可以调整过滤器来测试你喜欢的任何条件…

票数 5
EN

Stack Overflow用户

发布于 2012-01-09 18:58:47

对前面答案的增强可能是:

代码语言:javascript
运行
AI代码解释
复制
{% 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 %}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3259279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档