Как использовать переменную для итерации в шаблоне django?

Я использую 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>

Это часть моего views.py, где я генерирую строку последовательности до входного номера. Когда у меня есть строка, я возвращаю ее в шаблон 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>

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

Вернуться на верх