Я хочу иметь форму поиска для запроса к базе данных и отображения результатов поиска под ней.Я не хочу, чтобы при обновлении страницы появлялось предупреждение.Также я хочу знать, можно ли это сделать с помощью одной функции просмотра, поскольку во всех уроках, которые я видел, используется более одного.Как этот и этот .
Это работает, но показывает предупреждение, которое запрашивает подтверждение при нажатии кнопки обновления в браузере:
main.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)
forms.py
from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import DataRequired
class SearchForm(FlaskForm):
search = StringField('search', validators=[DataRequired()])
templates / 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 %}
Это то, что я хотел бы, но это даетpage not redirecting properly error
:
@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)