25

嗨,我一直在尝试在模板中使用类似的东西来填充文本区域。

{{form.content(value="please type content")}}

这在该字段是 textfield 时有效,主要是因为 html 接受值<input type="text"> 但同样不适用于 textarea ......有人可以帮我吗?

4

9 回答 9

37

您可以在渲染之前执行此操作,例如:

form.content.data = 'please type content'

不过,我是 WTForms 的新手。

于 2011-03-03T00:30:38.303 回答
21

对于小部件,您可以在字段构造函数中textarea使用参数设置默认内容。default

class YourForm(Form):
    your_text_area = TextAreaField("TextArea", default="please add content")

然后当你渲染:

{{form.content()}}

WTForms 将呈现默认文本。我无法找到一种方法来在渲染时为文本区域指定默认文本。

于 2011-02-25T21:02:00.547 回答
18

我最近遇到了同样的问题,我是这样解决的:

{% 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>'
于 2013-02-02T05:33:57.723 回答
6

爱丽丝似乎在表单小部件中内置了支持来做你想做的事情,但你是对的,它目前不起作用。

Sean 和 hilquias 发布了可以工作的体面工作。这是您可以尝试的形式(yuk yuk)

 else:
        form.title.data=blog.title
        form.blogdata.data=blog.blogdata
    return render_template('editblog.html',form=form)
于 2011-04-12T13:16:19.490 回答
6

对于那些试图jinja 模板中动态执行此操作的人,在渲染之前设置默认值并不能解决此问题。

而不是使用 WTForms 标准:

{{ form.content() }}

您可以使用原始 HTML 构造此元素,例如:

<textarea id="FormName-content" name="FormName-content">{{ dynamic values here }}</textarea>

...并且它仍然适用于您的 WTForms 验证。

希望这可以帮助某人:)

于 2018-11-02T23:10:43.337 回答
4

这个线程有点旧,但如果您需要使用动态内容预填充 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。

于 2014-05-13T08:58:53.263 回答
4

您还可以通过将 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 中包含的数据”

于 2014-05-28T20:51:42.253 回答
4

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>
于 2014-07-28T22:18:31.183 回答
-7

在 Textarea 中,如果使用 jquery,则需要使用 innerHTML 或 html()。

在您的上下文中应该是:

form.content.innerHTML = "please type content";

//using jquery
$('#element').html("please type content");

希望能帮助到你。

于 2011-02-25T12:58:58.263 回答