烧瓶form.validate_on_submit()不响应

时间:2020-01-15 00:18:24

标签: python flask form-submit

我正在尝试创建一个Flask应用程序,您可以在其中搜索“ car_name”一词,它将返回一个HTML模板,其中car_name被“ car_name”替换。 form.validate_on_submit()没有错误,但是当您单击Submit按钮时,没有任何反应。 我看过类似的问题,但它们全都是关于错误的,而在我自己那里,什么也没有发生(没有错误,但也没有响应)。 任何帮助将不胜感激,谢谢。

这是我的主要应用代码:

from flask_wtf import FlaskForm
from flask import Flask, flash, render_template, request, redirect
from wtforms import Form, StringField, SelectField, SubmitField
from wtforms.validators import Required


#Flask application object
app = Flask(__name__)
app.config['SECRET_KEY'] = 'jacky'


class SearchForm(FlaskForm):
    motor_name = StringField("", validators=[Required()])
    submit = SubmitField('Submit')

@app.route('/', methods=['GET', 'POST'])
@app.route('/home') 
def index():
    form = SearchForm()
    print(form.errors)
    motor_name = None
    if form.validate_on_submit():
        motor_name = form.motor_name.data
        return redirect(url_for('car', car_name=motor_name))
    return render_template('homepage.html', form=form)


@app.route('/car/<car_name>', methods=['GET', 'POST'])
def car(car_name):
return render_template('carpage.html', car_name=car_name)

这是homepage.html代码

{{ form.csrf_token }}
{{ form.protein_name.label }} {{ form.protein_name() }}
{{ form.submit() }}

1 个答案:

答案 0 :(得分:1)

我在代码中发现3个错误,并且在console / termina / cmd.exe中运行代码时看到错误消息。

首先:您在模板中使用了proteine_name而不是motor_name

第二:您忘记了<form method="POST"></form>

第三:您忘了导入url_for

很奇怪,您没有看到错误。


我使用render_template_string代替render_template只是为了更轻松地在一个文件中全部运行代码。

from flask_wtf import FlaskForm
from flask import Flask, flash, render_template, request, redirect, url_for, render_template_string
from wtforms import Form, StringField, SelectField, SubmitField
from wtforms.validators import Required


#Flask application object
app = Flask(__name__)
app.config['SECRET_KEY'] = 'jacky'


class SearchForm(FlaskForm):
    motor_name = StringField("", validators=[Required()])
    submit = SubmitField('Submit')

@app.route('/', methods=['GET', 'POST'])
@app.route('/home') 
def index():
    form = SearchForm()
    print(form.errors)
    motor_name = None
    if form.validate_on_submit():
        motor_name = form.motor_name.data
        return redirect(url_for('car', car_name=motor_name))
    return render_template_string('''<form method="POST">
{{ form.csrf_token }}
{{ form.motor_name.label }} {{ form.motor_name() }}
{{ form.submit() }}
</form>''', form=form)


@app.route('/car/<car_name>', methods=['GET', 'POST'])
def car(car_name):
    print('car_name:', car_name)
    #return render_template('carpage.html', car_name=car_name)
    return render_template_string('car_name: {{car_name }}', car_name=car_name)

app.run()