Поле формы TextAreaField
Класс TextAreaField из модуля wtforms создаёт многострочное текстовое поле.
В отличие от StringField, он рендерится в HTML-тег <textarea> и позволяет
вводить текст с переносами строк. Первым параметром передаётся имя поля, вторым - необязательный
словарь validators с валидаторами, а также другие именованные аргументы (например, label,
render_kw для передачи атрибутов HTML).
Синтаксис
from wtforms import TextAreaField
field = TextAreaField(label, [validators], **kwargs)
Пример
Давайте создадим форму с полем для ввода статьи и выведем её в шаблоне:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import TextAreaField, SubmitField
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
class ArticleForm(FlaskForm):
content = TextAreaField('Текст статьи')
submit = SubmitField('Отправить')
@app.route('/', methods=['GET', 'POST'])
def index():
form = ArticleForm()
if form.validate_on_submit():
return form.content.data
return render_template('index.html', form=form)
Шаблон для вывода формы:
<form method="post">
{{ form.csrf_token }}
<p>{{ form.content.label }} {{ form.content }}</p>
<p>{{ form.submit }}</p>
</form>
В результате в браузере отобразится многострочное текстовое поле:
<form method="post">
<input id="csrf_token" name="csrf_token" type="hidden" value="...">
<p><label for="content">Текст статьи</label> <textarea id="content" name="content"></textarea></p>
<p><input id="submit" name="submit" type="submit" value="Отправить"></p>
</form>
Пример
Давайте зададим количество строк и столбцов через атрибут render_kw:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import TextAreaField
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
class CommentForm(FlaskForm):
text = TextAreaField('Комментарий', render_kw={'rows': 10, 'cols': 40})
@app.route('/', methods=['GET', 'POST'])
def index():
form = CommentForm()
if form.validate_on_submit():
return form.text.data
return render_template('index.html', form=form)
Результат выполнения кода в HTML:
<textarea id="text" name="text" rows="10" cols="40"></textarea>
Пример
Давайте добавим валидатор DataRequired, чтобы поле нельзя было оставить пустым:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import TextAreaField, SubmitField
from wtforms.validators import DataRequired, Length
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
class FeedbackForm(FlaskForm):
message = TextAreaField('Сообщение', validators=[DataRequired(), Length(min=10, max=500)])
submit = SubmitField('Отправить')
@app.route('/', methods=['GET', 'POST'])
def index():
form = FeedbackForm()
if form.validate_on_submit():
return 'Сообщение принято'
return render_template('index.html', form=form)
Если отправить пустую форму, сработает валидатор и пользователь увидит ошибку. Результат выполнения кода при успешной отправке:
"Сообщение принято"
Смотрите также
-
класс
Form,
который создаёт форму из полей -
метод
validate_on_submit,
который проверяет отправку и валидность формы -
поле
StringField,
которое создаёт однострочное текстовое поле -
валидатор
DataRequired,
который требует обязательного заполнения поля