WTForms-Как предварительно заполнить поле textarea?
Привет, я пытался переустановить textareafield, используя что-то
как это в шаблоне.
{{form.content(value="please type content")}}
Это работает, когда поле является текстовым полем, прежде всего потому, что html
принимает значение для <input type="text">
но то же самое не работает для textarea...
Может кто-то, пожалуйста, помогите мне с этим?
Ответы
Ответ 1
В виджетах textarea
вы устанавливаете контент по умолчанию с аргументом default
в своих конструкторах полей.
class YourForm(Form):
your_text_area = TextAreaField("TextArea", default="please add content")
Затем при рендеринге:
{{form.content()}}
WTForms отобразит текст по умолчанию. Я не смог найти способ указать текст по умолчанию для текстовой области во время рендеринга.
Ответ 2
Вы можете сделать это перед рендерингом, например:
form.content.data = 'please type content'
Я новичок в WTForms.
Ответ 3
Недавно у меня была такая же проблема, я решил ее так:
{% set f = form.content.process_data("please type content") %}
{{ form.content() }}
Для теста вы можете попробовать выполнить следующий фрагмент:
>>> import wtforms
>>> import jinja2
>>> from wtforms.fields import TextAreaField
>>> class MyForm(wtforms.Form):
... content = TextAreaField("Text Area")
...
>>> t = jinja2.Template("""{% set f = form.content.process_data("please type content") %}
... {{ form.content() }}""")
>>>
>>> t.render(form=MyForm())
u'\n <textarea id="content" name="content">please type content</textarea>'
Ответ 4
У Алисы есть поддержка, встроенная в виджет формы, чтобы делать то, что вам нужно, но вы правы, он не работает в данный момент.
Шон и hilquia отправляют достойные работы вокруг, которые работают. Это форма (yuk yuk), которую вы можете попробовать
else:
form.title.data=blog.title
form.blogdata.data=blog.blogdata
return render_template('editblog.html',form=form)
Ответ 5
Вы также можете предварительно заполнить поле textarea, передав его в свой экземпляр класса WTforms в файле render_template (в этом примере я использую Flask):
@admin.route('/edit/<id>', methods=['GET', 'POST'])
def edit(id):
if request.method == 'POST':
form = ProspectForm(request.form)
prospect = Prospect.objects(id=id).first()
return render_template('admin/edit.html', prospect=prospect, prospect_form=ProspectForm(comments = prospect.comments))
Итак, comments = future.comments говорит: "Установите текст внутри поля TextAreaField с именем 'comments 'к данным, содержащимся в сайтах future.comments
Ответ 6
Этот поток немного устарел, но если вам нужно предварительно заполнить поле textarea динамическим контентом, вы можете использовать setattr и параметр по умолчанию, например:
if post.content:
form = EditPostForm
setattr(form, "content", TextAreaField(gettext('Post content'), validators=[Length(max=5000)], default=post.content))
form = EditPostForm()
else:
form = EditPostForm()
Не забудьте импортировать TextAreaField.
Ответ 7
Определите форму в поле TextArea
class MyForm(Form):
name = fields.StringField('Name', validators=[Required()])
description = fields.TextAreaField('Description')
Задайте содержимое текстовой области до разбора шаблона
form = MyForm()
form.description.data='this is my textarea content!' # This is the stuff...
return render_template('form.html', form=form, name=name)
Отобразить поля в шаблоне
<form ...>
{{ field(form.name, value=name) }}
{{ field(form.description, rows=2) }}
<button ...>Save</button>
</form>
Ответ 8
В Textarea вам нужно будет использовать innerHTML или html(), если вы используете jquery.
в вашем контексте должно быть:
form.content.innerHTML = "please type content";
//using jquery
$('#element').html("please type content");
Надеюсь, что это поможет.