gpt4 book ai didi

html - 使用 Flask-WTF/WTForms 在 Flask 中添加取消按钮

转载 作者:行者123 更新时间:2023-12-04 14:44:49 26 4
gpt4 key购买 nike

我想添加一个返回上一页的取消按钮。
我的代码是:
表格.py:

from flask_wtf import Form
from wtforms import StringField, HiddenField, SubmitField
from wtforms.validators import DataRequired, Length, ValidationError


def _required(form, field):
if not field.raw_data or not field.raw_data[0]:
raise ValidationError('Field is required')

class OrganisationForm(Form):
id = HiddenField('id', default="-1")
name = StringField('name', validators=[DataRequired()])
manager_name = StringField('manager_name')
address = StringField('address', validators=[DataRequired()])
city = StringField('city', validators=[DataRequired()])
postal_code = StringField('postal_code', validators=[DataRequired(), Length(max=16)])
province = StringField('province', validators=[Length(max=2, message="Can't exceed 2 characters")])
country = StringField('country', validators=[DataRequired()])
submit = SubmitField('Add')
cancel = SubmitField('Cancel')
和模板页面:
{% block content %}
<div class="content-section">
{{ utils.flashed_messages() }}
<div class="center">

{% if add_orgnisation %}
<h1>add an organisation</h1>
{% else %}
<h1>Edit an organisation</h1>
{% endif %}
<br/>
<br/>
{{ wtf.quick_form(form,novalidate=True) }}
</div>
</div>
{% endblock %}
View ,py
@orgs.route('/organisations/org_new')
@login_required
def org_new():
add_orgnisation = True
form = OrganisationForm()
return render_template("organisations/organisation_form.html", form=form, title="New Organisation", edit=False, add_orgnisation=add_orgnisation)
单击取消按钮时出现 405 错误:方法不允许。
我的错误在哪里?当我点击取消时,我应该添加什么才能返回上一页?
谢谢

最佳答案

I have a 405 error when I click on cancel button: Method not allowed. Where is my mistake?


当您提交表单时,数据将作为 POST 请求发送(因为呈现的表单元素将使用 <form method="post"> )。但是,您的 View 函数默认只允许 GET 请求,要接受 POST 请求,您必须指定 methods参数如下:
@orgs.route('/organisations/org_new', methods=['GET', 'POST'])  # <--
@login_required
def org_new():
# ...

and what should I add to have a go back previous page when I click on Cancel?


使用 SubmitField 创建的任何字段将呈现为提交按钮( <input type="submit"> ),因此当您单击它时它将提交表单。
要在单击取消按钮时返回上一页,通常有两种方法可以实现此目的:
1.在view函数中捕捉按钮提交
Ben's answer中的方法.您可以捕获提交,然后将用户重定向到上一页:
@orgs.route('/organisations/org_new', methods=['GET', 'POST'])
@login_required
def org_new():
if request.method == 'POST':
if form.cancel.data: # if cancel button is clicked, the form.cancel.data will be True
return redirect(url_for('previous_page_view_name'))
# ...
附言由于您已经设置了 novalidate=Truewtf.quick_form , 不需要设置 render_kw={'formnovalidate': True}cancel表单类中的按钮。
2.创建一个 <a>按钮而不是 cancel field
您可以创建一个普通的 <a>元素作为取消按钮( class="btn btn-secondary" )并填充 href参数与上一页的 URL(然后您不需要在表单类中添加 cancel 字段)。这样就不能用 wtf.quick_form() ,相反,您需要使用 wtf.form_field() 手动渲染每个字段:
<form method="post">
{{ wtf.form_field(form.id) }}
{{ wtf.form_field(form.name) }}
{{ wtf.form_field(form.manager_name) }}
{{ wtf.form_field(form.address) }}
...
{{ wtf.form_field(form.submit) }}
<a href="{{ url_for('previous_page_view_name') }}" class="btn btn-secondary">Cancel</a>
</form>

关于html - 使用 Flask-WTF/WTForms 在 Flask 中添加取消按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63434291/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com