否定Django模板中的布尔值

Ste*_*nTG 4 django django-templates

有没有办法在使用Django的模板中否定python布尔变量?我尝试了以下两种方法:

<td>{{ !variable_name }}</td>
<td>{{ not variable_name }}</td>
Run Code Online (Sandbox Code Playgroud)

但两者都给了我一个TemplateSyntaxError.

我意识到我能做到:

<td>{% if variable_name %} False {% else %} True {% endif %}</td>
Run Code Online (Sandbox Code Playgroud)

但这看起来很笨重.我希望可能有一个更清洁的方法.

mar*_*rue 12

根据Django文档中的这个例子,"not"应该可以工作:

{% if not athlete_list %}
    There are no athletes.
{% endif %}
Run Code Online (Sandbox Code Playgroud)

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

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


编辑:

如果你真的需要获得布尔值的逆值,我建议为此创建一个简单的模板标签:

from django import template

register = template.Library()

@register.simple_tag
def negate(boolean):
    return (not boolean).__str__()
Run Code Online (Sandbox Code Playgroud)

把它放在your_app/templatetags/templatetags.py中,你可以在你的模板中使用它,如下所示:

{% negate your_variable %}
Run Code Online (Sandbox Code Playgroud)

相当昂贵,我会坚持garnertb的答案.


gar*_*rtb 12

怎么样YESNO模板标签?

{{ value|yesno:"False,True" }}
Run Code Online (Sandbox Code Playgroud)

  • 严格来说,这并不是反转布尔值,因为“yesno”返回一个字符串。只要您不想对“反转”值进行进一步测试就可以。在这种情况下,“False”作为字符串,将计算为 True。 (2认同)
  • 如果你需要对反转值进行布尔评估,你可以做{{value | yesno:",True"}}.请在此处查看我的回答:http://stackoverflow.com/a/30075273/1005499 (2认同)