Я только начал создавать прототип приложения на Django. Я начал с работы с Руководство по приложению Django на сайте Django, который был очень полезен и дал мне то, что мне было нужно для начала. Теперь у меня есть пара, надеюсь, очень простых вопросов:
Я хочу поместить цикл в views.py, перебирая набор переменных, которые были переданы из формы. Итак, у меня есть множество элементов в форме HTML, каждый из которых имеет раскрывающийся список SELECT, чтобы люди могли выбрать оценку от 0 до 10, например:
<select name = "score1">
<option value=0 SELECTED>No score</option>
<option value=1>1</option>
<option value=2>2</option>
<option value=3>3</option>
<option value=4>4</option>
<option value=5>5</option>
<option value=6>6</option>
<option value=7>7</option>
<option value=8>8</option>
<option value=9>9</option>
<option value=10>10</option>
</select>
Итак, у меня есть, скажем, 100 из этих переменных: score1, score2, score3, ..., score99, score100. Когда форма отправлена, я хочу перебрать каждую из этих переменных и посмотреть, установлена ли она (т.е.не 0), и если да, я хочу сохранить это значение в подходящем месте в базе данных. Моя проблема в том, что я не могу понять, как перебирать эти переменные. Я предполагаю, что хочу что-то вроде этого:
for o in request.POST.all
endfor
но тогда я действительно не знаю, что с этим делать.
На самом деле я не ищу кого-нибудь, кто бы написал для меня код: мне просто нужны некоторые рекомендации о том, как написать такой цикл в python / Django, а также, возможно, некоторые указатели на хорошее справочное руководство, которое я могу увидеть онлайн или купите, что даст мне доступ к такого рода вещам.
Кроме того, вышеупомянутый объект select я создал в значительной степени вручную, и мне бы очень хотелось иметь возможность использовать цикл для его генерации в шаблоне в первую очередь. В моем шаблоне сейчас есть это:
<table>
{% for movie in movie_list %}
<tr>
<td> {{ movie }} </td>
<td>
<select name = "score{{ movie.id }}">
<option value=0 SELECTED>No score</option>
<option value=1>1</option>
<option value=2>2</option>
<option value=3>3</option>
<option value=4>4</option>
<option value=5>5</option>
<option value=6>6</option>
<option value=7>7</option>
<option value=8>8</option>
<option value=9>9</option>
<option value=10>10</option>
</select>
</td></tr>
{% endfor %}
</table>
Я чувствую, что должен быть способ создать простой цикл, который считает от 1 до 10, который генерирует для меня большинство этих вариантов, но я не могу понять, как это сделать ...






Вам нужно посмотреть Django формы.
Вы никогда не должны так строить свою собственную форму.
Вы должны объявить класс Form, который включает ChoiceField, и предоставить домен выбора для этого поля. Оттуда все будет происходить в значительной степени автоматически.
Варианты выбора, BTW, должны быть определены в вашей модели как диапазон значений для этого поля модели.
Ваша страница просто содержит {{form}}. Django создает форму с вариантами выбора и декодирует их для получения окончательного результата.
I feel like there must be a way to create a simple loop that counts from 1 to 10 that would generate most of those options for me, but I can't figure out how to do that...
Если вы не хотите использовать формы Django (почему, кстати?), Посмотрите этот тег настраиваемого диапазона или просто передайте объект range (1, 11) в свой шаблон и используйте его в цикле {% for %}.
Ага. Разделение проблем в действии;)
Следуйте совету S.Lotts по формам, это сэкономит время в долгосрочной перспективе, если вы сделаете их так же, как Django. Для этого цикла вы искали:
<select name = "score{{ movie.id }}">
<option value=0 SELECTED>No score</option>
{% for i in range(1, 11) %}
<option value = {{ i }}>{{ i }}</option>
{% endfor %}
</select>
Ах ... ваш ответ заставил меня что-то щелкнуть: правильно ли я думаю, что вы не можете помещать код Python в шаблоны? Только язык шаблонов Django?