2014-02-21 90 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