#django #forms
#django #формы
Вопрос:
Здесь полный новичок…
Я провожу опрос, в котором я показываю 5 вопросов на странице. Каждый вопрос содержит 4 радиобокса.
В моем шаблоне django я просматриваю контейнер (latest_poll_list) всех моих вопросов (опрос):
<form action="/first/vote/" method="post">
{% csrf_token %}
{% for poll in latest_poll_list %}
<li>{{ poll.question }}</li>
{% for choice in poll.choice_set.all %}
<input type="radio" name="choice{{poll.id}}" id="choice{{ forloop.counter }}" value="{{ choice.id }}" />
<label for="choice{{ forloop.counter }}">{{ choice.choice }}</label><br />
{% endfor %}
{% endfor %}
<input type="submit" value="Vote" />
</form>
Наконец, как мне вернуть результаты из нескольких вопросов? Должен ли я помещать choice poll.id в массив / контейнер?
Кроме того, откуда django знает, что forloop.counter ссылается на внутренний цикл, а не на внешний цикл? Спасибо за ваше терпение, пока я наращиваю!
Ответ №1:
Я бы рассмотрел возможность использования formset
или model formset
.
а forloop.counter предназначен для самого внутреннего forloop, однако вы можете передать счетчик из внешнего forloop во внутренний forloop, используя {% with %}
тег:
{% for object in objects %}
<label>{{ forloop.counter }}</label>
{% with outside_counter=forloop.counter %}
{% for subobject in object %}
<p>outside: {{ outside_counter }} inside: {{ forloop.counter }}</p>
{% endfor %}
{% endwith %}
{% endfor %}
Результаты:
<label>0</label>
<p>outside: 0 inside: 0</p>
<p>outside: 0 inside: 1</p>
<label>1</label>
<p>outside: 1 inside: 0</p>
<p>outside: 1 inside: 1</p>
...