web-dev-qa-db-ja.com

TextAreaを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.'))
    ])

TypeError:object。new()はパラメータを取りません

23
Niklas

非常に古い質問ですが、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 %}
48
jwogrady

この問題のテンプレートを更新する必要はありません。 TextAreaFieldの定義で行と列を設定できます。サンプルは次のとおりです:\

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

にとって render_kw提供されている場合、デフォルトのキーワードを提供する辞書がレンダリング時にウィジェットに提供されます。

29
Junyong Yao

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>
...
21
AnaPana

ここで、render_kwの使用を提案する上記のソリューションが、テキスト領域の高さISが設定されていないという条件の下で実際に機能することを追加したいと思います。

したがって、フィールドがある場合:

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

そしてあなたのHTMLファイルにあなたは書く:

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

その場合、someclassのCSS定義では、高さを設定しないでください。これは行の設定と競合し、明らかに高さが行よりも優先されるためです。

1
Jay