2011-02-25 156 views
15

嗨我一直试图在模板中使用类似 的textarea字段。WTForms - 如何预先填充textarea字段?

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

这工作时,该字段为文本框主要是因为HTML 接受<input type="text"> 值,但同样不为textarea的工作... 是否有人可以帮助我?

+0

Alice,在这种情况下什么是“form”?它是一个“WTForms.Form”对象还是其他的东西? – 2011-02-25 15:56:53

+0

这是一个WTForms.Form对象肖恩! – Rasmus 2011-02-25 17:13:44

回答

16

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

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

然后,当你呈现:

{{form.content()}} 

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

+2

谢谢肖恩!但我需要在模板中做到这一点。它就像是一个编辑博客链接。当你点击任何博客的编辑按钮时,它应该在文本框中显示一个带有标题的表单(这是使用value参数完成的)以及博客在textarea字段中的内容。 – Rasmus 2011-02-26 01:15:06

+0

嗨,窗体的定义,查看功能和html的窗体可以在这里查看: - http://pastebin.com/QC4MC84B – Rasmus 2011-02-26 01:37:16

+1

'' – mgoldwasser 2014-04-15 18:00:30

-7

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

在你的背景应该是:

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

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

希望它能帮助。

+0

WTForms是一个用于渲染表单HTML的服务器端Python库 - 不幸的是,jQuery在这种情况下不会有所帮助。 – 2011-02-25 21:02:51

+4

谢谢你试图帮忙! – Rasmus 2011-02-26 01:16:41

28

可以呈现之前做到这一点,是这样的:

form.content.data = 'please type content' 

我是新来WTForms虽然。

+0

这就是我想要的 – diogovk 2016-02-02 15:31:30

5

爱丽丝似乎有支持内置到窗体小部件来做你在做什么,但你是对的,它现在不工作。

肖恩和希尔基斯在体面工作后做了工作。这是你可以尝试

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

最近我有同样的问题形式(蔡素玉议员),我解决了这个问题是这样的:

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

Tks!工作就像一个魅力=) – edelans 2013-07-22 17:41:48

+0

这是伎俩,虽然有一个小问题。我不确定我是否做错了什么。不幸的是'process_data()'在HTML上打印了一个'None',除此之外,它是黄金。 – KBN 2014-02-10 06:51:07

+0

对不起,我在写答案时没有阅读帖子的标签。我使用Tornado模板模块发布了解决方案,但是,我已经使用Jinja2更新了答案。 – 2014-02-10 23:35:32

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。

1

您还可以通过它传递到您的WTforms类实例化在render_template(在这个例子中,我使用了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)) 

所以,评论=前景。评论说:“里面设置了一个名为‘意见’包含在prospect.comments数据TextAreaField字段中的文本”

0

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>