Обновить текст кнопки отправить в wtforms


У меня есть форма, которая будет использоваться для новой отправки и обновления. Мой вопрос касается текста кнопки "Отправить". Я хочу изменить текст на New submit и на New update, в зависимости от ситуации. Это чисто информативно.

class Interview(Form):
    ...
    submit = SubmitField('New submit')  

Если возможно, я хочу избежать создания нового класса, с точно такими же полями, только из-за текста submit.

4 4

4 ответа:

Правильный способ сделать это с миксинами:

class InterviewMixin():
    ...

class InterviewSubmit(Form, InterviewMixin):
    submit = SubmitField('New submit')

class InterviewUpdate(Form, InterviewMixin):
    submit = SubmitField('New update')

Я решил эту проблему, не включив кнопку submit в определение формы, вместо этого я добавляю кнопку submit в HTML, основываясь на том, какая метка мне нужна.

{% if pagetitle == 'Update' %}
   <p><input type="submit" name="btn" value="New Update"></p>
{% endif %}
{% if pagetitle == 'Submit' %}
   <p><input type="submit" name="btn" value="New Submit"></p>
{% endif %}

Таким образом, вы можете использовать одну и ту же форму и иметь разные метки на кнопке, в зависимости от того, какой из них следует использовать.

Если вам нужно, вы можете использовать одну и ту же переменную для задания действия формы, Если вам нужно направить на разные представления.

Или вы можете использовать значение кнопки в вид.

if flask.request.form['btn'] == 'New Update':
   ...
elif flask.request.form['btn'] == 'New Submit':
   ...

Правильным способом было бы сделать две формы и проверить, какая кнопка отправки нажата на стороне сервера.

if submit_form.validate_on_submit() and submit_form.any_field.data:
        print "submit_form submit button is Pressed"
elif update_form.validate_on_submit() and update_form.any_field.data:
        print "update_form submit button is submitted"

Старый вопрос, но для любого другого, кто столкнется с этим, альтернативой является просто установить его из кода перед рендерингом шаблона:

if is_submit:
    form.submit.label.text = 'New submit'
else:
    form.submit.label.text = 'New update'

return render_template(...)