Flask render_template не перезагружает сайт с новыми переменными – я неправильно думаю? ⇐ Python
Flask render_template не перезагружает сайт с новыми переменными – я неправильно думаю?
Я делаю частный проект и использую Flask для создания веб-приложения.
Я хочу отображать в списке элементы, загруженные из базы данных SQL.
В окне по умолчанию будет показан полный список всех элементов.
Используя флажки в качестве входных данных фильтра на сайте, я хочу отображать обновленные элементы после установки или снятия флажка. Я делаю это с помощью EventListener. После установки или снятия флажка обновленные значения фильтра пересылаются с помощью команды request.open. В этой команде значения фильтра будут преобразованы в строковые значения JSON.
Таким образом, будет создан новый HTML-запрос, а необходимые для фильтрации значения будут находиться внутри URL-адреса. В моем скрипте Python есть специальный маршрут, который обрабатывает URL-адреса, внутри которых есть эти строковые значения.
Значения поступают правильно, а команда SQL получает правильные элементы из базы данных. Но эти значения не будут отображаться правильно, когда я передам их методу render_template().
Есть ли у меня ошибка в мышлении или это должно сработать (хотя если должно работать, то должно работать)?
Код для тестирования:
index.html:
Обновить {% для имени в именах %} {{ name.id }} {{ name.first_name }} {{ name.last_name }}
{% конец для %} app.py:
из импорта SQL CS50 из фляги импорта Flask, перенаправление, render_template импортировать JSON # Настроить приложение приложение = Колба(__name__) # Настройте библиотеку CS50 для использования базы данных SQLite. db = SQL("sqlite:///db/test.db") db_names = db.execute("SELECT * FROM test ORDER BY id;") @app.route("/", методы = ["POST", "GET"]) индекс защиты(): """Показать домашнюю страницу со списком имен""" return render_template("index.html", имена = db_names) @app.route("/index/, ", методы = ["GET"]) def indexfiltered(first_name, Last_name): """Показать домашнюю страницу с отфильтрованным списком""" first_names = (json.loads(first_name)) Last_names = (json.loads(last_name)) filtered_names = db.execute("SELECT * FROM test WHERE first_name = ? OR Last_name = ?;", [first_names], [last_names]) печать (фильтрованные_имена) return render_template("index.html", имена = filtered_names) javascript.js:
функция обновления() { var first_name = "Джен" var last_name = "Вок" константный запрос = новый XMLHttpRequest(); console.log(имя, фамилия) request.open("GET", `/index/${JSON.stringify(first_name)}, ${JSON.stringify(last_name)}`) запрос.отправить(); } Создайте базу данных с именем test.db, используя этот код:
CREATE TABLE тест( идентификатор int, строка first_name, строка Last_name ); INSERT INTO test(id, first_name, Last_name) VALUES (1, «Джон», «Фитиль»); INSERT INTO test(id, first_name, Last_name) VALUES (2, «Джонни», «Вики»); INSERT INTO test(id, first_name, Last_name) VALUES (3, «Джен», «Век»); INSERT INTO test(id, first_name, Last_name) VALUES (4, «Джон», «Вок»); INSERT INTO test(id, first_name, Last_name) VALUES (5, «Джин», «Вик»); INSERT INTO test(id, first_name, Last_name) VALUES (6, «Джин», «Фитиль»); requirements.txt:
cs50 Колба Попробовал, как показано во фрагментах выше. Я ожидал, что страница перезагрузится/перерисуется с новыми значениями, но она снова показывает только исходные значения. Я не хочу, чтобы страница перезагружалась полностью, поскольку эти элементы отображаются только в небольшой части моего приложения.
Я делаю частный проект и использую Flask для создания веб-приложения.
Я хочу отображать в списке элементы, загруженные из базы данных SQL.
В окне по умолчанию будет показан полный список всех элементов.
Используя флажки в качестве входных данных фильтра на сайте, я хочу отображать обновленные элементы после установки или снятия флажка. Я делаю это с помощью EventListener. После установки или снятия флажка обновленные значения фильтра пересылаются с помощью команды request.open. В этой команде значения фильтра будут преобразованы в строковые значения JSON.
Таким образом, будет создан новый HTML-запрос, а необходимые для фильтрации значения будут находиться внутри URL-адреса. В моем скрипте Python есть специальный маршрут, который обрабатывает URL-адреса, внутри которых есть эти строковые значения.
Значения поступают правильно, а команда SQL получает правильные элементы из базы данных. Но эти значения не будут отображаться правильно, когда я передам их методу render_template().
Есть ли у меня ошибка в мышлении или это должно сработать (хотя если должно работать, то должно работать)?
Код для тестирования:
index.html:
Обновить {% для имени в именах %} {{ name.id }} {{ name.first_name }} {{ name.last_name }}
{% конец для %} app.py:
из импорта SQL CS50 из фляги импорта Flask, перенаправление, render_template импортировать JSON # Настроить приложение приложение = Колба(__name__) # Настройте библиотеку CS50 для использования базы данных SQLite. db = SQL("sqlite:///db/test.db") db_names = db.execute("SELECT * FROM test ORDER BY id;") @app.route("/", методы = ["POST", "GET"]) индекс защиты(): """Показать домашнюю страницу со списком имен""" return render_template("index.html", имена = db_names) @app.route("/index/, ", методы = ["GET"]) def indexfiltered(first_name, Last_name): """Показать домашнюю страницу с отфильтрованным списком""" first_names = (json.loads(first_name)) Last_names = (json.loads(last_name)) filtered_names = db.execute("SELECT * FROM test WHERE first_name = ? OR Last_name = ?;", [first_names], [last_names]) печать (фильтрованные_имена) return render_template("index.html", имена = filtered_names) javascript.js:
функция обновления() { var first_name = "Джен" var last_name = "Вок" константный запрос = новый XMLHttpRequest(); console.log(имя, фамилия) request.open("GET", `/index/${JSON.stringify(first_name)}, ${JSON.stringify(last_name)}`) запрос.отправить(); } Создайте базу данных с именем test.db, используя этот код:
CREATE TABLE тест( идентификатор int, строка first_name, строка Last_name ); INSERT INTO test(id, first_name, Last_name) VALUES (1, «Джон», «Фитиль»); INSERT INTO test(id, first_name, Last_name) VALUES (2, «Джонни», «Вики»); INSERT INTO test(id, first_name, Last_name) VALUES (3, «Джен», «Век»); INSERT INTO test(id, first_name, Last_name) VALUES (4, «Джон», «Вок»); INSERT INTO test(id, first_name, Last_name) VALUES (5, «Джин», «Вик»); INSERT INTO test(id, first_name, Last_name) VALUES (6, «Джин», «Фитиль»); requirements.txt:
cs50 Колба Попробовал, как показано во фрагментах выше. Я ожидал, что страница перезагрузится/перерисуется с новыми значениями, но она снова показывает только исходные значения. Я не хочу, чтобы страница перезагружалась полностью, поскольку эти элементы отображаются только в небольшой части моего приложения.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение