#flask #flask-wtforms
#flask #flask-wtforms
Вопрос:
У меня есть форма flask, которая имеет некоторые значения для данного события. При отправке я перенаправляю пользователя на страницу, где я беру значения из формы и вычисляю некоторую статистику о событии. Пользователь может принять эти значения и отправить событие в базу данных или нажать кнопку редактирования, которая вернет их обратно в форму, чтобы изменить значения. Проблема в том, что форма уже отправлена, когда они нажимают «Редактировать» и перенаправляются обратно в форму, все значения исчезают. Я хочу, чтобы значения оставались, потому что, скорее всего, они будут изменять только одно или два поля, и я не хочу, чтобы им приходилось повторно вводить их все. Есть идеи, как это сделать?
Комментарии:
1. Трудно сказать, не видя никакого кода. Но почему вы не можете сохранить значения в базе данных и загрузить значения при открытии формы? Если пользователь хочет отредактировать значения, вы просто обновляете значения в БД. Или вы не можете сохранить значения в глобальном словаре и просто повторно загрузить его, когда вернетесь к форме, если некоторые значения в словаре существуют? Опять же, трудно сказать, поскольку у вас нет примера кода, но это всего лишь некоторые мысли, о которых вы можете подумать.
2. @Payam спасибо за ответ! В настоящее время я сохраняю в глобальном dict, что просто не казалось самым чистым способом сделать это. Я новичок в flask, поэтому я не знал, есть ли чистый способ, которым форма flask может справиться с этим.
if (current_user.username in current_app.config["current_form"] and request.method != "POST"): form = current_app.config["current_form"][current_user.username] else: form = Form()
Ответ №1:
Вы можете позволить Flask-wtf автоматически генерировать форму, и она может запоминать вводимые пользователем данные. Если вы передаете экземпляр формы в свой шаблон Jinja следующим образом:
form = SomeForm()
return render_template("template.html", form=form)
Минимальный пример формы:
class SomeForm(FlaskForm):
name = TextField(label='name', default="")
save = SubmitField(label='Save', description="Save")
И в вашем шаблоне Jinja:
<form method="post" action="the url" class="form-inline">
<ul>
{% for field in form %}
<li>{{ field.label }} {{ field }}</li>
{% endfor %}
</ul>
</form>
Ответ №2:
Вы можете использовать window.history.back();
.
Из History API: «Это действует точно так же, как если бы пользователь нажал кнопку «Назад» на панели инструментов своего браузера»
Это работает, потому что браузер сохраняет входные данные пользователей, все type="password"
, кроме