我想要一个搜索表单来查询数据库并在其下方显示搜索结果。我不希望在刷新页面时出现任何确认警告。我还想知道这是否可以通过单个 View 函数来完成,因为我见过的所有教程都使用了多个 View 函数。喜欢this one和 this one .
这是有效的,但它会显示一条警告,要求在单击浏览器上的刷新按钮时进行确认:
主要.py
@app.route('/', methods=['GET', 'POST'])
@app.route('/index', methods=['GET', 'POST'])
def index():
form = SearchForm()
query = form.data['search']
if query != '':
results = Foo.query.filter(Foo.name.like('%'+query+'%')).all()
return render_template('index.html', form=form, query=query, results=results)
return render_template('index.html', form=form)
表单.py
from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import DataRequired
class SearchForm(FlaskForm):
search = StringField('search', validators=[DataRequired()])
模板/index.html
{% block page_content %}
<div class="page-header">
<form style="display: inline;" action="{{ url_for('index') }}" method="post" name="search">
{{ form.search(size=20) }}
<input type="submit" value="Search">
</form>
{% if results %}
<h1>Search results for "{{ query }}":</h1>
{{ results }}
{% endif %}
</div>
{% endblock page_content %}
这是我想要的,但它给出了一个页面没有正确重定向的错误
:
@app.route('/', methods=['GET', 'POST'])
def index():
form = SearchForm(request.form)
if form.validate:
session['query'] = form.data['search']
return redirect(url_for('index'))
if 'query' in session:
results = Foo.query.filter(Foo.name.like('%'+session.get('query')+'%')).all()
return render_template('index.html', form=form, query=session.get('query'), results=results)
else:
return render_template('index.html', form=form)
最佳答案
您可以使用一个函数来呈现搜索页面,然后在 form.validate_on_submit()
之后查询数据库并返回结果。对于搜索结果添加 if statetment将它们显示在与搜索表单相同的模板上。
@app.route('/search', methods=['GET', 'POST'])
def search():
form = SearchForm()
if form.validate_on_submit():
search_term = form.query.data
results = Foo.query.all()
return render_template('search.html', form=form, results=results)
return render_template('search.html', form=form)
搜索.html
{% block content%}
<form method="post">
{{ form.csrf_token }}
{{ form.query }}
{{ form.submit }}
{% if results %}
{{ results }}
{% endif %}
</form>
{% endblock %}
关于python - Flask - 使用相同的 View 呈现搜索表单然后搜索结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52904116/