WTForms-如何预填充textarea字段?

时间:2011-02-25 12:54:51

标签: python flask wtforms

您好我一直试图使用某些东西来填充textareafield 像这样在模板中。

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

当字段是textfield时,这主要是因为html 接受<input type="text">的值 但同样对textarea不起作用...... 有人可以帮帮我吗?

9 个答案:

答案 0 :(得分:31)

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

form.content.data = 'please type content'

我是WTForms的新手。

答案 1 :(得分:16)

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

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

然后当你渲染:

{{form.content()}}

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

答案 2 :(得分:13)

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

{% 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>'

答案 3 :(得分:6)

Alice似乎在表单窗口小部件中内置了支持,可以执行您所需的操作但是您现在无法正常工作。

Sean和hilquias发布了可行的体面劳动。这是你可能尝试的形式(yuk yuk)

 else:
        form.title.data=blog.title
        form.blogdata.data=blog.blogdata
    return render_template('editblog.html',form=form)

答案 4 :(得分:3)

您还可以通过将textarea字段传递给render_template中的WTforms类实例(在此示例中我使用的是Flask框架)来预填充textarea字段:

@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 表示“将名为'comments'的TextAreaField字段内的文字设置为prospect.comments中包含的数据”

答案 5 :(得分:2)

对于尝试在jinja模板中 动态地执行此操作的用户,在渲染前设置默认值不能解决此问题。

代替使用WTForms标准:

{{ form.content() }}

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

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

...,它仍然可以与您的WTForms验证一起使用。

希望这对某人有帮助:)

答案 6 :(得分:1)

使用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>

答案 7 :(得分:0)

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

答案 8 :(得分:-7)

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

在您的上下文中应该是:

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

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

希望它有所帮助。