Flask 烧瓶-模态上的表单-如何在模态上显示字段错误?

Flask 烧瓶-模态上的表单-如何在模态上显示字段错误?,flask,flask-sqlalchemy,flask-wtforms,flask-bootstrap,Flask,Flask Sqlalchemy,Flask Wtforms,Flask Bootstrap,我正在试验flask,只是创建一些基本功能,将数据添加到模式中显示的表单中。虽然我已经成功地使表单显示在模式中并从模式中保存它,但我很难理解需要做什么来确保字段验证错误显示在模式本身上。当前,若有错误,用户将被重定向到带有编辑表单的整个页面 他们说图片比文字好-所以这里有一个gif显示正在发生的事情: 整个应用程序代码已打开,可以访问heroku上的当前状态。。。用户名:admin@admin.com密码:adminpassword。反正都是沙箱 相关代码如下: routes.py @费用。

我正在试验flask,只是创建一些基本功能,将数据添加到模式中显示的表单中。虽然我已经成功地使表单显示在模式中并从模式中保存它,但我很难理解需要做什么来确保字段验证错误显示在模式本身上。当前,若有错误,用户将被重定向到带有编辑表单的整个页面

他们说图片比文字好-所以这里有一个gif显示正在发生的事情:

整个应用程序代码已打开,可以访问heroku上的当前状态。。。用户名:admin@admin.com密码:adminpassword。反正都是沙箱

相关代码如下:

routes.py


@费用。路线(“/费用”)
@需要登录
定义费用():
page=request.args.get('page',1,type=int)
expenses=Expense.query.order\u by(Expense.Expense\u date.desc()).paginate(page=page,per\u page=5)
形式=支出形式()
返回呈现模板('expense/expense.html',expenses=expenses,form=form)
@expenses.route(“/expense/new”,方法=['GET','POST']))
@需要登录
定义新费用():
形式=支出形式()
if form.validate_on_submit():
费用=费用(说明=表单.description.data,费用日期=表单.expense\u日期.data,
金额=表单.金额.数据,增值税金额=表单.增值税金额.数据,可转让=表单.可转让.数据,作者=当前用户)
db.session.add(费用)
db.session.commit()
flash(“您的费用已创建!”,“成功”)
返回重定向(url_for('expenses.expense'))
返回呈现模板('expense/create_expense.html',title='New expense',
表格=表格,图例=‘新费用’)
现在expenses.html是一个很大的文件,但是在它上面使用以下命令调用模式:

添加新费用
{%include“expense/partials/addModal.html”%}
而addModal.html如下所示:


{%来自“util/macros.html”导入表单_字段,上下文为%}
增加新费用
&时代;
{{form.hidden_tag()}}
{{图例}}
{{form.description.label(class=“form control label”)}
{%if form.description.errors%}
{{form.description(class=“form control form control lg无效”)}
{%form.description.errors%中的错误}
{{error}}
{%endfor%}
{%else%}
{{form.description(class=“form control form control lg”)}
{%endif%}
{{form.amount.label(class=“form control label”)}
{%if form.amount.errors%}
{{form.amount(class=“form control form control lg无效”)}
{form.amount.errors%中的错误为%1}
{{error}}
{%endfor%}
{%else%}
{{form.amount(class=“form control form control lg”)}
{%endif%}
{{form.expense\u date.label(class=“form control label”)}
{%if form.expense\u date.errors%}
{{form.expense_date(class=“form control form control lg is invalid”)}
{form.expense_date.errors%}中的错误为%
{{error}}
{%endfor%}
{%else%}
{{form.expense_date(class=“form control form control lg”,type=“date”)}
{%endif%}
{{form.vat\u amount.label(class=“form control label”)}
{%if form.vat\u amount.errors%}
{{form.vat_amount(class=“form control form control lg is invalid”)}
{form.vat_amount.errors%}中的错误为%
{{error}}
{%endfor%}
{%else%}
{{form.vat_amount(class=“form control form control lg”)}
{%endif%}
{%if form.transferable.errors%}
{{form.transferable(class=“form control form control lg无效”)}
{%form.Transferable.errors%中的错误}
{{error}}
{%endfor%}
{%else%}
{{form.transferable(type=“checkbox”)}
{%endif%}
{{form.transferable.label(class=“form control label”)}
加

接近
这是因为,如果表单有一些错误,您将呈现
create\u expense.html
,这就是为什么表单不以模式显示的原因

我将合并两个视图:
/expense/new
/expense
,这样它就可以处理
GET
POST
,并在表单出现错误时有条件地显示模式

合并视图:

@expenses.route("/expense", methods=['GET', 'POST'])
@login_required
def expense():
    page = request.args.get('page', 1, type=int)
    expenses = Expense.query.order_by(Expense.expense_date.desc()).paginate(page=page, per_page=5)
    form = ExpenseForm()
    if form.validate_on_submit():
        expense = Expense(description=form.description.data, expense_date=form.expense_date.data,
                        amount=form.amount.data,vat_amount=form.vat_amount.data,Transferrable=form.Transferrable.data, author=current_user)
        db.session.add(expense)
        db.session.commit()
        flash('Your expense has been created!', 'success')
    return render_template('expense/expense.html', expenses=expenses, form=form)
条件模态显示在
addModal.html
的底部:

{% if form.errors %}

<script>
$('#AddNewModal').modal('show');
</script>

{% endif %}

但是,在这些更改之后,视图
/expense/new
/expense
将有一些共同的代码,因此可能需要重构。现在,您至少知道了为什么错误不会显示在模式中。

我希望所有问题都如此清晰和描述性;)谢谢-你真是太好了。:)谢谢它帮助我理解了正在发生的事情,但我现在对表单验证的一个行为感到困惑——请参阅DataRequired验证触发器,无需刷新,但数据类型的完整性(整数vs字符串)仅在往返数据库后触发。为什么我是吗
<form method="POST" action="/expense">