0

Web ページにフォームを表示しようとしています。フォームの表示を担当するテンプレート ファイルの一部を以下に示します。

{% 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 %}

したがって、私が で 2 つの選択肢を期待していることに気付くかもしれませんpoll.choice_set.all。私の目標は、両方を異なる方法で表示することです(ラベルのクラスでわかるように)。したがって、これを行う方法は、最初に1つの選択肢をフォーマットで表示し、カウンターをインクリメントしてから、インクリメントされたために2番目の選択肢を別のフォーマットで表示するカウンターを宣言することcountでした。

これは完全に間違っており、この方法では実行できないと確信しています。自分がやりたいことを達成する方法を誰かが理解するのを手伝ってくれるかどうか疑問に思っていました.

したがって、基本的には、2 つの選択肢を持つ poll オブジェクトがあります。各選択肢を異なる方法で表示したい (異なる CSS クラス)。

4

1 に答える 1

3

この特定のケースでは、forloop.counter または forloop.counter0 を使用できるように見えます。これは、仮想の「選択」変数がループの反復ごとに 1 回変更されるためです。あなたは単純化することができます

{% 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 に答える