Как использовать переменную для итерации в шаблоне 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>

Это мой файл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>

Можете ли вы полностью показать свои взгляды, проблема должна быть в передаче переменной.

Arif Rasim 11.05.2024 16:21

Я предполагаю, что вы не получите отправленный здесь номер grondstoffen_count = int(self.request.GET.get('grondstoffen_count', 0)) Попробуйте использовать 5 вместо 0 по умолчанию, чтобы посмотреть, изменится ли что-то.

Arif Rasim 11.05.2024 16:42

Теперь я включил весь класс представления. Я попробовал установить 5 по умолчанию, но это ничего не изменило.

Greg Degoeiegast 11.05.2024 16:51

Кроме того, когда я распечатываю «volgordelijst» перед его возвратом, он работает отлично.

Greg Degoeiegast 12.05.2024 14:08
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Спасибо большое, проблема действительно решена!

Greg Degoeiegast 15.05.2024 17:27

Другие вопросы по теме

Похожие вопросы

Как правильно индексировать фрейм данных с помощью функции?
Как лучше всего объединить два кадра данных, один из которых имеет перекрывающиеся диапазоны?
Почему randint распределен неравномерно?
Как использовать алгоритм агломеративной кластеризации из библиотеки Python scikit-learn с объявленным количеством объектов в кластере?
Неопределенный символ: _ZN15TracebackLoggerC1EPKc, версия libcudnn_ops_infer.so.8
Токенизаторы && Docker: не удалось создать колеса для токенизаторов, которые необходимы для установки проектов на основе pyproject.toml
Продукты Django не добавляются в корзину сразу
Мои потери при тестировании увеличиваются, но потери поездов для нейронной сети уменьшаются. Что я должен делать?
Установлен модуль Python `owiener`, но во время импорта продолжает появляться сообщение «Нет модуля с именем «owiener»»
Comfyui: python torch/изменение размера изображения – высота регулирует ширину, а ширина регулирует цвет?