要使用WTForms使用指定数量的列和行渲染我的textareafield,如何设置列数和行数?我按照这个问题的说明进行操作但不起作用:
How to specify rows and columns of a <textarea > tag using wtforms
我尝试添加小部件,但它不起作用:
class AForm(Form):
name = TextField('Name', [validators.Length(min=4)])
title = TextField('Title', [validators.Length(min=4)])
text = TextAreaField('Text', widget=TextArea(row=70, cols=11))
phonenumber = TextField('Phone number')
phonenumberhide = BooleanField('Display phone number on site')
price = TextField('Price')
password = PasswordField('Password')
email = TextField('Email', [
validators.Length(min=6, message=_('Little short for an email address?')),
validators.Email(message=_('That\'s not a valid email address.'))
])
TypeError:object。 new ()不带参数
答案 0 :(得分:40)
很老的问题,但由于WTF-Form文档不清楚,我发布了我的工作示例。 OP,希望你还没有继续这个。 : - )
表单
from flask_wtf import Form
from wtforms.fields import StringField
from wtforms.widgets import TextArea
class PostForm(Form):
title = StringField(u'title', validators=[DataRequired()])
body = StringField(u'Text', widget=TextArea())
<强>模板强>
{% extends "base.html" %}
{% block title %}Create Post{% endblock %}
{% block content %}
<H3>Create/Edit Post</H3>
<form action="" method=post>
{{form.hidden_tag()}}
<dl>
<dt>Title:
<dd>{{ form.title }}
<dt>Post:
<dd>{{ form.body(cols="35", rows="20") }}}
</dl>
<p>
<input type=submit value="Publish">
</form>
{% endblock %}
答案 1 :(得分:25)
无需为此问题更新模板。您可以在TextAreaField
的定义中设置行和列。以下是示例:\
class AForm(Form):
text = TextAreaField('Text', render_kw={"rows": 70, "cols": 11})
对于render_kw
,如果提供,则在呈现时将向窗口小部件提供提供默认关键字的字典。
答案 2 :(得分:19)
TextArea
字段也可以在没有任何小部件的情况下实现:
<强> forms.py 强>
from wtforms import Form, TextField, TextAreaField
class ContactForm(Form):
name = TextField('Name')
email = TextField('Email Address')
body = TextAreaField('Message Body')
<强> template.html 强>
...
<form method="POST" action="">
{{ form.csrf_token }}
{{ form.name.label }} {{ form.name(size=30) }} <br/>
{{ form.email.label }} {{ form.email(size=30) }} <br/>
{{ form.body.label }} {{ form.body(cols="35", rows="20") }} <br/>
<input type="submit" value="Submit"/>
</form>
...
答案 3 :(得分:0)
我想在这里补充一点,上面的建议使用render_kw的解决方案确实在文本区域的高度未设置的情况下有效。
因此,如果您有一个字段:
temp = TextAreaField('temp', render_kw={'rows':20})
并在HTML文件中编写:
{{ form.temp(class_='someclass' )}}
然后在someclass的CSS定义中,不应该设置height,因为这会与行设置冲突,并且显然height优先于行。