构造一个wtforms的TextAreaField是这样的:
content = wtf.TextAreaField('Content', id="content-area", validators=[validators.Required()])
如何指定与此textarea关联的行数和列数?
答案 0 :(得分:14)
您不应该在声明窗口小部件的位置执行此操作。你已经在模板中做到了。例如:
{{form.content(rows='50',cols='100')}}
需要确保将行和列指定为字符串。
答案 1 :(得分:4)
{{form.text(cols="35", rows="20")|safe}}
正在运作
答案 2 :(得分:3)
nettuts+有一个关于Flask的教程。基本上,它的工作原理如下:
from flask.ext import wtf
class ContactForm(wtf.Form):
content = wtf.TextAreaField("Content", [validators.Required()])
并在你的HTML中:
<form action="" method="post">
{{ form.content }}
</form>
您可以在css中指定它,而不是在html中指定布局,例如:
form textarea#content {
width: 100px;
height: 100px;
max-width: 100px;
}
答案 3 :(得分:3)
以下是一个例子:
<div class="row">
<div class="col-md-12">
<div class="form-group">
{{ wtf.form_field(form.notes, rows=5) }}
</div>
</div>
</div>
答案 4 :(得分:3)
更简单;创建字段时使用render_kw
参数:
port = IntegerField(u"HTTP port", validators=[DataRequired(), NumberRange(1025, 65535)], render_kw={'class': 'form-control'})
mytextarea = TextAreaField(u"Content", render_kw={'class': 'form-control', 'rows': 5})
然后渲染文件:
{{ field() }}
答案 5 :(得分:1)
为方便起见,请先添加此宏。
_formhelpers.html
:
{% macro render_field(field) %}
<dt>{{ field.label }}
<dd>{{ field(**kwargs)|safe }}
{% if field.errors %}
<ul class=errors>
{% for error in field.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</dd>
{% endmacro %}
以这种方式导入此宏和代码。它应该工作。
{% from "_formhelpers.html" import render_field %}
<form action="" method="post">
{{ render_field(form.content,rows=100, cols=100) }}
</form>
希望它有所帮助!
答案 6 :(得分:1)
我能够通过python表单页面上的render_kw标记修改行和列。当我第一次在WTForm网站上看到此定义时,直到看到其他人使用此示例修改form元素的类的示例时,我才知道它的作用。所以他们的定义让我感到困惑,直到我开始尝试它为止。
render_kw(dict)–如果提供,则是一个词典,提供默认关键字,这些关键字将在渲染时提供给小部件。 -https://wtforms.readthedocs.io/en/stable/fields.html
我在表单页面上使用了它。
current_templates_in_library = TextAreaField('current_templates_in_library', render_kw={'rows':'4'})
要添加多个标签和值,只需将它们用逗号分隔即可。
render_kw={'class':'myclass','rows':'4'}
然后将其呈现为HTML。请注意那里添加了“行”属性。
<textarea class="form-control" id="current_templates_in_library" name="current_templates_in_library" rows="4" style="z-index: auto; position: relative; line-height: 20px; font-size: 14px; transition: none 0s ease 0s; background: transparent !important;">
rhel6
rhel7
win_2012r2
centos7
</textarea>
答案 7 :(得分:0)
您可以简单地使用此替换窗口小部件来记住渲染的默认值:
import wtforms.widgets.core
class TextArea(wtforms.widgets.core.TextArea):
def __init__(self, **kwargs):
self.kwargs = kwargs
def __call__(self, field, **kwargs):
for arg in self.kwargs:
if arg not in kwargs:
kwargs[arg] = self.kwargs[arg]
return super(TextArea, self).__call__(field, **kwargs)
现在,您可以将此新窗口小部件添加到字段中:
content = wtf.TextAreaField(
'Content',
id='content-area',
widget=TextArea(rows=50,cols=100),
validators=[validators.Required()])
您现在可以在没有任何额外参数的情况下渲染此字段,并获得50x100 textarea。
答案 8 :(得分:-1)
我查看了代码,发现Field类定义了__new__
和__init__
。 __new__
需要一大堆*args
和**kargs
。因此,您可以在TextAreadField创建中传递rows=x cols=y
,它应该可以工作。我注意到wtforms正在为这种情况创建一个名为“UnboundField”的类,我不知道这会导致问题的影响,如果有的话。但是创建TextAreaField的下一步是相同的。 (这是控制权转移到__init__
之前。)