嗨,我一直在尝试在模板中使用类似的东西来填充文本区域。
{{form.content(value="please type content")}}
这在该字段是 textfield 时有效,主要是因为 html 接受值<input type="text">
但同样不适用于 textarea ......有人可以帮我吗?
您可以在渲染之前执行此操作,例如:
form.content.data = 'please type content'
不过,我是 WTForms 的新手。
对于小部件,您可以在字段构造函数中textarea
使用参数设置默认内容。default
class YourForm(Form):
your_text_area = TextAreaField("TextArea", default="please add content")
然后当你渲染:
{{form.content()}}
WTForms 将呈现默认文本。我无法找到一种方法来在渲染时为文本区域指定默认文本。
我最近遇到了同样的问题,我是这样解决的:
{% 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>'
爱丽丝似乎在表单小部件中内置了支持来做你想做的事情,但你是对的,它目前不起作用。
Sean 和 hilquias 发布了可以工作的体面工作。这是您可以尝试的形式(yuk yuk)
else:
form.title.data=blog.title
form.blogdata.data=blog.blogdata
return render_template('editblog.html',form=form)
对于那些试图在jinja 模板中动态执行此操作的人,在渲染之前设置默认值并不能解决此问题。
而不是使用 WTForms 标准:
{{ form.content() }}
您可以使用原始 HTML 构造此元素,例如:
<textarea id="FormName-content" name="FormName-content">{{ dynamic values here }}</textarea>
...并且它仍然适用于您的 WTForms 验证。
希望这可以帮助某人:)
这个线程有点旧,但如果您需要使用动态内容预填充 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。
您还可以通过将 textarea 字段传递给 render_template 中的 WTforms 类实例化来预填充文本区域(在此示例中,我使用的是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=prospect.comments表示“将TextAreaField字段中名为 'comments'的文本设置为前景.comments 中包含的数据”
TextArea
使用字段定义表单
class MyForm(Form):
name = fields.StringField('Name', validators=[Required()])
description = fields.TextAreaField('Description')
在渲染模板之前设置 textarea 内容
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>
在 Textarea 中,如果使用 jquery,则需要使用 innerHTML 或 html()。
在您的上下文中应该是:
form.content.innerHTML = "please type content";
//using jquery
$('#element').html("please type content");
希望能帮助到你。