Как отобразить мою TextArea с помощью WTForms? - PullRequest
21 голосов
/ 02 ноября 2011

Чтобы отобразить мое текстовое поле с указанным количеством столбцов и строк с помощью 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 () не принимает параметров

Ответы [ 4 ]

41 голосов
/ 24 апреля 2014

Очень старый вопрос, но поскольку документация по WTF-форме не ясна, я публикую свой рабочий пример.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 %}
25 голосов
/ 08 сентября 2016

Нет необходимости обновлять шаблон для этой проблемы. Вы можете установить строки и столбцы в определении TextAreaField. Вот образец: \

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

Для render_kw, если предоставляется, словарь, который предоставляет ключевые слова по умолчанию, будет передан виджету во время визуализации.

20 голосов
/ 30 октября 2015
Поле

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>
...
0 голосов
/ 23 апреля 2019

Я хочу добавить, что приведенные выше решения, которые предлагают использовать render_kw, действительно работают В УСЛОВИЯХ, что высота текстовой области НЕ установлена.

так что если у вас есть поле:

    temp = TextAreaField('temp', render_kw={'rows':20})

и в своем HTML-файле вы пишете:

    {{ form.temp(class_='someclass' )}}

тогда в CSS-определении someclass не следует устанавливать высоту, так как это будет конфликтовать с настройками ваших строк, и, очевидно, высота имеет приоритет над строками.

...