Поле формы SearchField
Класс SearchField применяется для создания поля поиска в формах
Flask-WTF. Первым параметром передаётся подпись поля (метка),
которая отображается рядом с полем ввода. Поле генерирует
HTML-тег input с атрибутом type="search",
предназначенный для ввода поисковых запросов.
Класс наследуется от StringField и принимает все его
параметры: валидаторы, описание, фильтры, значения по умолчанию.
Синтаксис
from wtforms import SearchField
field = SearchField(label, [validators], **kwargs)
Пример
Давайте создадим простую форму поиска с одним полем:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import SearchField, SubmitField
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
class SearchForm(FlaskForm):
query = SearchField('Search')
submit = SubmitField('Go')
@app.route('/', methods=['GET', 'POST'])
def index():
form = SearchForm()
res = None
if form.validate_on_submit():
res = form.query.data
return render_template('index.html', form=form, res=res)
Шаблон для вывода формы:
<form method="post">
{{ form.hidden_tag() }}
<p>{{ form.query.label }} {{ form.query() }}</p>
<p>{{ form.submit() }}</p>
</form>
{% if res %}
<p>You searched for: {{ res }}</p>
{% endif %}
После ввода строки 'abcde' и отправки формы результат будет:
<p>You searched for: abcde</p>
Пример
Давайте добавим валидатор DataRequired, чтобы поле
не могло быть пустым:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import SearchField, SubmitField
from wtforms.validators import DataRequired
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
class SearchForm(FlaskForm):
query = SearchField('Search', validators=[DataRequired()])
submit = SubmitField('Go')
@app.route('/', methods=['GET', 'POST'])
def index():
form = SearchForm()
res = None
if form.validate_on_submit():
res = form.query.data
return render_template('index.html', form=form, res=res)
Если отправить пустую форму, в шаблоне можно вывести ошибку:
<form method="post">
{{ form.hidden_tag() }}
<p>{{ form.query.label }} {{ form.query() }}</p>
{% for error in form.query.errors %}
<p>{{ error }}</p>
{% endfor %}
<p>{{ form.submit() }}</p>
</form>
Результат выполнения кода при пустом поле:
<p>This field is required.</p>
Смотрите также
-
класс
FlaskForm,
который является базовым классом для форм -
поле
StringField,
от которого наследуется SearchField -
валидатор
DataRequired,
который проверяет обязательность поля -
метод
validate_on_submit,
который проверяет отправку и валидность формы