如何用WTForms渲染我的TextArea?

Nik*_*ntz 21 python wtforms

要使用WTForms使用指定数量的列和行渲染我的textareafield,如何设置列数和行数?我按照这个问题的说明进行操作但不起作用:

如何使用wtforms指定<textarea>标记的行和列

我尝试添加一个小部件,但它不起作用:

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.'))
    ])
Run Code Online (Sandbox Code Playgroud)

TypeError:object.new()不带参数

jwo*_*ady 44

很老的问题,但由于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())
Run Code Online (Sandbox Code Playgroud)

模板

{% 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 %}
Run Code Online (Sandbox Code Playgroud)

  • 使用新版本的`wtforms`,你可以直接导入`TextAreaField`:`来自wtforms import TextAreaField` (7认同)

小智 26

无需为此问题更新模板.您可以在定义中设置行和列TextAreaField.这是样本:

class AForm(Form):
     text = TextAreaField('Text', render_kw={"rows": 70, "cols": 11})
Run Code Online (Sandbox Code Playgroud)

因为render_kw,如果提供,将在渲染时向窗口小部件提供提供默认关键字的字典.

  • 我试过上面的答案.你的是最好最容易的.谢谢! (2认同)

Ana*_*ana 21

TextArea 也可以在没有任何小部件的情况下实现字段:

forms.py

from wtforms import Form, TextField, TextAreaField

class ContactForm(Form):
    name = TextField('Name')
    email = TextField('Email Address')
    body = TextAreaField('Message Body')
Run Code Online (Sandbox Code Playgroud)

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>
...
Run Code Online (Sandbox Code Playgroud)