2011-04-14 101 views
6

在這裏得到了一個問題。django模板如果條件

我有form.tpl.yes_no_required以下

{% if form.tpl.yes_no_required == True %} 
      <!-- path 1 --> 
{% else %} 
    {% if form.tpl.yes_no_required == False %} 

     <!-- path 2 --> 
    {% endif %} 
{% endif %} 

的值是無,但我被路由到路徑2.任何人都可以請解釋爲什麼會這樣呢?編輯:如果值是none,我不希望它顯示任何東西。

回答

14

不能使用模板語言測試對你的想法是常數,則解析器實際上正在測試2個「文字」。

解析器測試名爲'None'和'False'的2個文字。 解析器嘗試在上下文中解析這些異常時拋出VariableDoesNotExist異常,並且兩個對象都解析爲python值無 和None == None。

from django.template import Context, Template 
t = Template("{% if None == False %} not what you think {% endif %}") 
c = Context({"foo": foo() }) 

打印U '不是你想的 '

c = Context({'None':None}) 
t.render(c) 

打印U' 不是你想的 '

c = Context({'None':None, 'False':False}) 
t.render(c) 

打印U''

1

無!=假無!=真還... 做一些這樣的事情對於沒有項目

{% if form.tpl.yes_no_required %} 
      <!-- path 1 --> 
{% else %} 
    {% if not form.tpl.yes_no_required %} 

     <!-- path 2 --> 
    {% endif %} 
{% endif %} 
+0

我想我的代碼不進入路徑2,但奇怪的是我的代碼進入路徑2. – goh 2011-04-14 18:52:30

+0

@amateur你可以在Python中檢查它,如果沒有類型將其更改爲False – Efazati 2011-04-14 19:03:09

+0

實際上我需要所有3個值,真假和無。 – goh 2011-04-14 19:24:09