2014-02-21 44 views
1

有没有一种方法来取消使用Django的模板中的python布尔变量? 我都试过了以下内容:否定Django模板中的布尔值

<td>{{ !variable_name }}</td> 
<td>{{ not variable_name }}</td> 

但俩给我TemplateSyntaxError。

我意识到,我可以这样做:

<td>{% if variable_name %} False {% else %} True {% endif %}</td> 

但这似乎真的沉闷。我希望有一个更清洁的方法。

回答

9

那么yesno模板标签呢?

{{ value|yesno:"False,True" }} 
+0

啊,这看起来很棒。不知道这个。 – marue

+0

我正在查看一些文档,并注意到一个(显然没有出现在我的搜索中)。它比使用整体更短,但看起来有点冒险。原来,实际上我需要在两种情况下都做一些格式化,所以这可能是最好的选择 – StephenTG

+0

严格地说,这不是颠倒布尔值,因为'yesno'返回一个字符串。只要您不想对“反向”值进行进一步测试,就没有问题。在这种情况下,作为字符串的“False”将评估为True。 – seddonym

7

“而不是”应该工作,根据从Django文档这个例子:

{% if not athlete_list %} 
    There are no athletes. 
{% endif %} 

您可以在这里找到了例子:https://docs.djangoproject.com/en/1.4/ref/templates/builtins/#boolean-operators

如果你想直接得到一个布尔值的字符串表示,恐怕你得走你所描述的笨重。 {{variable}}输出变量内容的字符串表示或调用一个函数。


编辑:

如果你真的需要得到一个布尔值的倒数的,我建议创建一个简单的templatetag:

from django import template 

register = template.Library() 

@register.simple_tag 
def negate(boolean): 
    return (not boolean).__str__() 

把在your_app /templatetags/templatetags.py你可以在你的模板中使用这样的:

{% negate your_variable %} 

魁费用昂贵,我会坚持加内特的答案。

+1

没有为我工作。我认为不可能只能用'if'标签 – StephenTG