Я использую Python и Django, и я хотел бы использовать переменную, которую я ввел в предыдущем вводе, для перебора создания нескольких других полей ввода.
Это та часть шаблона Django, где я задаю номер, который хочу использовать в итерации:
<form method = "GET">
<label for = "grondstoffen_count" style = "font-family: Oswald, sans-serif;">Give how many products were delivered:</label>
<input type = "number" name = "grondstoffen_count" id = "grondstoffen_count" min = "0" required>
<button type = "submit" name = "submit_count">Bevestig</button>
</form>
Это мой файлview.py, в моем последнем elif я генерирую строку последовательности до введенного номера. Когда у меня есть строка, я возвращаю ее в шаблон Django:
class BehandelNieuweVoorraadView(generic.ListView):
template_name = "Ano_app/BehandelNieuweVoorraad.html"
model = Grondstof
checkaankomst = []
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['grondstof_options'] = self.optieLijst(1)
if self.checkaankomst == []:
context['aankomstgrondstoffen'] = self.optieLijst(2)
self.checkaankomst.extend(context['aankomstgrondstoffen'])
else:
context['aankomstgrondstoffen'] = self.checkaankomst
return context
def optieLijst(self, a):
grondstof_options = Grondstof.objects.distinct().values_list('naam', flat=True)
if a == 1:
return sorted(grondstof_options)
else:
aankomstgrondstoffen = random.sample(list(grondstof_options), random.randint(2, 5))
return sorted(aankomstgrondstoffen)
def get_queryset(self):
if 'submit_hoeveelheden' in self.request.GET:
grondstofnamen = []
for i in range(1, 6):
grondstofnaam = self.request.GET.get(f"query_grondstof{i}naam", False)
grondstofnamen.append(grondstofnaam)
grondstofhoeveelheden = []
for i in range(1, 6):
grondstofhoeveelheid = self.request.GET.get(f"query_grondstof{i}hoeveelheid", False)
if grondstofhoeveelheid == '':
grondstofhoeveelheden.append(0.0)
else:
grondstofhoeveelheden.append(float(grondstofhoeveelheid))
nietOpgeslagen = verdeelAangekomenGrondstoffen(grondstofnamen, grondstofhoeveelheden, Opslagplaats.objects.all(), Grondstof.objects.all(), Eindproduct.objects.all())
elif 'submit_correctelevering' in self.request.GET:
print("naar orderpagina")
elif 'submit_count' in self.request.GET:
grondstoffen_count = int(self.request.GET.get('grondstoffen_count', 0))
volgordelijst = ""
for i in range(1, grondstoffen_count + 1):
volgordelijst += str(i)
return render(self.request, 'Ano_app/BehandelNieuweVoorraad.html', {'volgordelijst': volgordelijst})
В шаблоне я получаю «volgordelijst» и хотел бы использовать эту переменную для цикла. Я хотел бы иметь столько же полей ввода, сколько число в исходном вводе, но когда я запускаю сервер, он не показывает ни одного. Когда я меняю «volgordelijst» на «12345», все работает отлично. У меня также есть другие списки, которые я передаю шаблону, и у меня нет никаких проблем с их повторением:
<form method='GET'>
{% for i in volgordelijst %}
{% with key = "query_grondstof"|add:i|add:"hoeveelheid" %}
<div style = "display: inline-block; margin-right: 10px;">
<h4 style = "font-family: Oswald, sans-serif;">Grondstof {{ i }} naam:</h4>
<input list = "grondstof{{ i }}datalist" name = "query_grondstof{{ i }}naam" id = "grondstof{{ i }}" required>
<datalist id = "grondstof{{ i }}datalist">
{% for option in grondstof_options %}
<option value = "{{ option }}">
{% endfor %}
</datalist>
</div>
<div style = "display: inline-block; margin-right: 10px;">
<h4 style = "font-family: Oswald, sans-serif;">Grondstof {{ i }} hoeveelheid in ton:</h4>
<input type='number' step = "0.01" name='{{ key }}' value='{{ request.GET.key }}' min = "0" required>
</div>
<br>
{% endwith %}
{% endfor %}
</form>
Я предполагаю, что вы не получите отправленный здесь номер grondstoffen_count = int(self.request.GET.get('grondstoffen_count', 0)) Попробуйте использовать 5 вместо 0 по умолчанию, чтобы посмотреть, изменится ли что-то.
Теперь я включил весь класс представления. Я попробовал установить 5 по умолчанию, но это ничего не изменило.
Кроме того, когда я распечатываю «volgordelijst» перед его возвратом, он работает отлично.






Теперь, когда вы высказали свое мнение, я вижу проблему. Вы пытаетесь передать переменную volgordelijst в шаблон из функции get_queryset. Предполагается, что функция get_queryset возвращает набор запросов в функцию get_context_data. Чтобы передать переменную в шаблон, вам нужно передать ее из функции get_context_data.
Спасибо большое, проблема действительно решена!
Можете ли вы полностью показать свои взгляды, проблема должна быть в передаче переменной.