Форум сайта python.su
Привет.
Работаю с Flask и WTForm. Имею форму с SelectField заполняю ее через запрос в базу потом формирование list и уже потом передаю на форму в render_template.
users_from_db = users_db.query.all() users_list = [(i.id, i.name) for i in users_from_db] input_form.username.choices = users_list
default_for_select=[item for item in users_list if item[0] == id_user]
input_form.username.default = default_for_select[0]
Отредактировано freeddos (Дек. 2, 2019 13:10:14)
Офлайн
freeddosФорма заполняется в браузере? Значит, там надо наладить связь через JavaScript. Браузер должен как-то узнать, прошёл ли запрос, и, если не прошёл, заполнить поля формы отправленным ранее содержимым. Это содержимое ты можешь как сохранить в браузере на время выполнения запроса, так и передать его браузеру в качестве ответа “не получилось, ошибка, на тебе данные, которые ты давал”.
Но возник вопрос каким образом вернуть те же самые данные в форму с SelectField например если форма не прошла валидацию (чтобы не перезаполнять данные) или в других случаях когда нужно вернуть данные.
Отредактировано py.user.next (Дек. 4, 2019 02:37:23)
Офлайн
Правильно ли я понимаю, что лучше использовать JS + JSON.
Flask выдает шаблон главной страницы. На этой странице отрабатывает JS который делает запрос на Flask (на какой нибудь route).
Этот route получает запрос и обрабатывает (например запрос для заполнения того же SelectField), Flask генерирует json из данных которые он взял в базе и отправляет обратно ответ этому JS.
JS получает ответ в виде json и формирует из него заполнение для формы (того же SelectField).
PS получается что jinja не очень удобно т.к. будет перегружаться страница полностью, формироваться объект формы и посылаться в шаблон.
Офлайн
freeddosУ меня сложилось мнение что у вас перемешались мухи котлеты и бегемоты.
PS получается что jinja не очень удобно т.к. будет перегружаться
Офлайн
freeddosПри AJAX'е ничего не будет перезагружаться. Ты сможешь редактировать DOM текущей страницы на лету. Скрипт на JavaScript будет в фоне из браузера общаться с бэкендом на сервере через API, который ты сам придумаешь каким угодно. Там Jinja вообще не участвует. Только при первой загрузке страницы Jinja работает. Вся остальная работа по заполнению формы идёт между скриптом в браузере и бэкендом на сервере без участия шаблонов - на голом HTTP-протоколе.
PS получается что jinja не очень удобно т.к. будет перегружаться страница полностью, формироваться объект формы и посылаться в шаблон.
Отредактировано py.user.next (Дек. 5, 2019 00:26:05)
Офлайн