我正在尝试在我的网页上显示一个表单。负责显示表单的模板文件的一部分如下所示:
{% 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类)。
答案 0 :(得分: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 %}
每次遇到标签时,{%cycle“right”“left”%}将在“right”和“left”之间切换为类值,因此这将产生在“right”和“right”之间进行更改的副作用如果你结束了超过2个选项,那么“离开”。