2009-12-20 39 views
1

即時得到在Django奇怪的錯誤至今:Django的「如果」語句格式不正確

'if' statement improperly formatted 

模板引發錯誤是這樣的:有一個和DIFF在上下文

{% if diff >= 0 %} 
<span class="pos">+{{ diff }} 
{% else %} 
<span class="neg">-{{ diff }} 
{% endif %} 
</span> 
<span>{{ a }}</span> 

視圖這個:

def add(request, kaart_id): 
    if request.is_ajax() and request.method == 'POST': 
     x = Kaart.objects.get(id=kaart_id) 
     x.pos += 1 
     x.save 
     x = Kaart.objects.get(id=kaart_id)  
     from django.utils import simplejson 
     diff = x.pos - x.neg 
     a = "(+1)" 
     context = { 'diff':diff, 'a':a } 
     return render_to_response('sum.html', context, context_instance=RequestContext(request)) 

無論我用什麼等式if,>,> =,== ..他們都會引起同樣的錯誤。

並儘可能我可以告訴所有的書:http://docs.djangoproject.com/en/dev/ref/templates/builtins/#id5

艾倫。

回答

7

以上直到Django的1.2土地你正在尋找"Smart If", a Django Template Tag

django 模板的更智能的{%if%}標籤。

雖然保留了當前的Django功能,但它也處理了 等於, 大於和小於運算符。一些常見的案例::

{% if articles|length >= 5 %}...{% endif %} 
    {% if "ifnotequal tag" != "beautiful" %}...{% endif %} 

參數和運營商必須有他們之間的空間,所以 {% if 1>2 %}不是一個有效的智能標籤是否。

所有支持的運營商:orandin=(或 ==),!=>>=<<=

+0

謝謝!我想到別的東西然後等待1.2! – 2009-12-20 20:36:15

+0

只需使用標籤即可。它很容易加載它們(在文檔中),然後當1.2發佈時,你的代碼已經兼容,你可以刪除標籤代碼。 – 2009-12-21 02:55:46

1

您需要與ENDIF

{% if var1 %}

{{ var1|safe }} 

{% else %}

{% if var2 %}

{{ var2|safe }} 

{% else %}

關閉每個if語句

{% if var3 %}

{{ var3|safe }} 

{% endif %}{% endif %}{% endif %}

0

「智能,如果」 在開發版本剛剛添加標籤(即最終會成爲1.2)。

如果您使用的是穩定版本(1.1.x或更早版本),那麼您將無法在「if」模板標記中使用這些比較運算符。

編輯:看只是== operator

2

如前所述,您不能在{% if %}標記中使用運算符。只接受布爾值(你可以ANDORNOT在一起。)

對簡單的相等,則可以使用{% ifequal val1 val2 %}標籤。

原因是將「邏輯」推出模板並進入模型層。即你應該有一個方法,你的模型像這樣:

def positive_diff(self): 
    return self.diff >= 0 

然後調用,在你的模板:

{% if x.positive_diff %} ... {% endif %} 

或者,您可以在您的視圖設置一個額外的變量:

positive_diff = diff >= 0