#python #forms #flask #textarea #wtforms
#python #формы #flask #текстовая область #wtforms
Вопрос:
Насколько я понимаю, если вы хотите заполнить текстовую область, вы помещаете текст между тегами текстовой области. Однако я использую WTForms. Как я могу предварительно заполнить форму из представлений или в моем шаблоне?
ФОРМА
class ModuleSectionForm(FlaskForm):
title = StringField('Section Title', validators=[DataRequired()])
description = TextAreaField('Description', validators=[DataRequired()])
submit = SubmitField('Add Section')
Вид
@modules.route('/update_section/<name>/<title>', methods=['GET', 'POST'])
def update_section(name, title):
form = ModuleSectionForm()
module = Module.objects(title=name).first()
section = None
for sect in module.sections:
if sect.title == title:
section = sect
#if form.validate_on_submit():
#save data
return render_template('modules/update_section.html', section=section, form=form)
ШАБЛОН
<form method="post" action="{{ url_for('modules.update_section', name=name) }}">
{{ form.hidden_tag() }}
<div class="form-group">
{{ form.title.label(class="form-control-label") }}
{{ form.title(class="form-control", value=section.title) }}
</div>
<div class="form-group">
{{ form.description.label(class="form-control-label") }}
{{ form.description(class="form-control", default=section.description) }}
</div>
<div class="form-group">
{{ form.submit(class="btn btn-secondary shadow") }}
</div>
</form>
Комментарии:
1. Вы когда-нибудь это понимали?
Ответ №1:
Это можно сделать, просто назначив текст для отображения заранее (например, в представлении).
Попробуйте отредактировать свой view ( update_section
) таким образом:
form.description.data = 'text you want to display'
И ваш шаблон следующим образом:
- {{ form.description(class="form-control", default=section.description) }}
{{ form.description(class="form-control") }}
Имейте в виду, есть альтернативный способ, который заключается в указании атрибута placeholder (но я думаю, это не то, что вы хотите здесь сделать).
Ответ №2:
Обычно с помощью WTForms (предположим, здесь вы используете Flask и Bootstrap) вы будете использовать value
атрибут ввода для предварительного заполнения поля формы. Обратите внимание, что предварительное заполнение поля отличается от предоставления «заполнителя», который является всего лишь эфемерным намеком. Поэтому обычно мы предварительно заполняем так:
<div class="form-group row">
<label for="form_subject" class="col-sm-2 col-form-label">Subject</label>
<div class="col-sm-7">
<input class="form-control" id="form_framework" name="form_framework"
value="{{ instruct.Subject }}">
</div>
</div>
С помощью Flask и Bootstrap name
атрибут требуется для передачи значения обратно контроллеру при отправке, value
атрибут используется для предварительного заполнения поля из объекта — в этом случае наш контроллер передал объект с именем instruct, который имеет атрибут Subject
.
Но вы должны знать, что разные типы входных данных в WTForms имеют разные атрибуты, и это остается забавной задачей для разработчика, чтобы разобраться.
У TextArea нет value
атрибута, поэтому для предварительного заполнения поля необходимо указать значение между тегами, например, так (опять же, используя Bootstrap здесь на случай, если какой-либо из этих тегов незнаком):
<div class="form-group row">
<label for="form_longish_text"
class="col-sm-2 col-form-label">Longish Text</label>
<div class="col-sm-7">
<textarea class="form-control" rows="3"
id="form_longish_text"
name="form_longish_text">{{ instruct.LongishText }}
</textarea>
</div>
</div>