2013-05-12 117 views
0

我試圖在我的網頁上顯示一個表單。負責顯示錶單模板文件的一部分如下所示:Django模板語言變量用法

{% for choice in poll.choice_set.all %} 
<input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" /> 
{% count = 0 %} 

{% if count == 0 %} 
    <label class="right" for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br /> 
    {% count += 1 %} 

{% elif count == 1 %} 
    <label class="left" for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br /> 

{% endif %} 

{% endfor %} 

所以,你可能會注意到,我在poll.choice_set.all期待兩種選擇。我的目標是以不同的方式顯示(如您可以看到的標籤類)。所以我試圖這樣做的方式是聲明一個計數器,它最初將以格式顯示一個選項並遞增計數器,然後以不同的格式顯示第二個選項,因爲count已遞增。

我非常肯定這是完全錯誤的,不能這樣做。我想知道如果有人能幫助我理解如何實現我想要做的事情。

所以基本上我有一個有兩個選擇的民意調查對象。我希望每個選項都以不同的方式顯示(不同的CSS類)。

+1

Django模板不允許變量賦值。換句話說,'count + = 1'永遠不會工作。 – almostflan 2013-05-12 01:15:09

+0

這裏有一個關於它的相關[post](http://stackoverflow.com/questions/719127/django-template-new-variable-declaration)。 – almostflan 2013-05-12 01:16:09

+0

@almostflan謝謝,正是我需要知道的。我最終使用了'forloop.counter',並且一切工作都很好。 Django具有太多的功能,Docs很大* ...即使只有一小部分基礎知識(對於初學者來說)也很難知道。我只是需要練習。 – capcom 2013-05-12 02:33:06

回答

3

在這種特殊情況下,您可以使用forloop.counter或forloop.counter0,因爲您的假設「選擇」變量在每次循環迭代中都會更改一次。你可以簡化

{% for choice in poll.choice_set.all %} 
    <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" /> 

    {% if forloop.counter0 == 0 %} 
     <label class="right" for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br /> 

    {% elif forloop.counter0 == 1 %} 
     <label class="left" for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br /> 

    {% endif %} 
{% endfor %} 

或者,如果你想要更短的代碼,你可以這樣做:

{% for choice in poll.choice_set.all %} 
    <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" /> 
    <label class="{% cycle 'right' 'left' %}" for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br /> 

{% endfor %} 

{%週期「右」,「左」%}將之間切換「右」和「左「作爲每次遇到該標記時的類值,因此如果您選擇超過2個選項,則會在」右「和」左「之間產生副作用。

+0

很好,謝謝。我跟你的第一個建議去了。我實際上注意到'forloop.counter'正在被使用,並很快發現我可以將它適應於我的場景。你的回答重申了這一點。謝謝。 – capcom 2013-05-12 02:34:05