0

我正在尝试在我的网页上显示一个表单。负责显示表单的部分模板文件如下所示:

{% 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 类)。

4

1 回答 1

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" 和 "left" 之间切换的副作用如果您最终有超过 2 个选项。

于 2013-05-12T02:04:51.603 回答