こんにちは、テンプレートでこのようなものを使用してテキストエリアフィールドを作成しようとしています。
{{form.content(value="please type content")}}
これは、フィールドがテキストフィールドの場合に機能します。これは、主にhtmlが値を受け入れるためです<input type="text">
が、テキストエリアでは同じことが機能しないためです...誰かがこれで私を助けてくれますか?
レンダリングする前に、次のように行うことができます。
form.content.data = 'please type content'
ただし、WTFormsは初めてです。
textarea
ウィジェットの場合、フィールド コンストラクターの引数でデフォルトのコンテンツを設定しますdefault
。
class YourForm(Form):
your_text_area = TextAreaField("TextArea", default="please add content")
次に、レンダリングすると:
{{form.content()}}
WTForms はデフォルトのテキストをレンダリングします。レンダリング時にテキスト領域のデフォルト テキストを指定する方法を見つけることができませんでした。
私は最近同じ問題を抱えていましたが、次のように解決しました:
{% set f = form.content.process_data("please type content") %}
{{ form.content() }}
テストのために、次のスニペットを実行してみてください。
>>> import wtforms
>>> import jinja2
>>> from wtforms.fields import TextAreaField
>>> class MyForm(wtforms.Form):
... content = TextAreaField("Text Area")
...
>>> t = jinja2.Template("""{% set f = form.content.process_data("please type content") %}
... {{ form.content() }}""")
>>>
>>> t.render(form=MyForm())
u'\n <textarea id="content" name="content">please type content</textarea>'
アリスは、あなたが求めていることを行うためにフォームウィジェットに組み込まれたサポートがあるようですが、現時点では機能しません.
Sean と hilquias は、機能するまともな回避策を投稿しています。これはあなたが試すかもしれないフォームです(yuk yuk)
else:
form.title.data=blog.title
form.blogdata.data=blog.blogdata
return render_template('editblog.html',form=form)
TextArea
フィールドでフォームを定義する
class MyForm(Form):
name = fields.StringField('Name', validators=[Required()])
description = fields.TextAreaField('Description')
テンプレートをレンダリングする前にテキストエリアのコンテンツを設定します
form = MyForm()
form.description.data='this is my textarea content!' # This is the stuff...
return render_template('form.html', form=form, name=name)
テンプレートのフィールドをレンダリングする
<form ...>
{{ field(form.name, value=name) }}
{{ field(form.description, rows=2) }}
<button ...>Save</button>
</form>
このスレッドは少し古いですが、textarea フィールドに動的コンテンツを事前入力する必要がある場合は、次のように setattr とデフォルトパラメータを使用できます。
if post.content:
form = EditPostForm
setattr(form, "content", TextAreaField(gettext('Post content'), validators=[Length(max=5000)], default=post.content))
form = EditPostForm()
else:
form = EditPostForm()
TextAreaField をインポートすることを忘れないでください。
テキストエリアでは、jquery を使用する場合は innerHTML または html() を使用する必要があります。
あなたの文脈では:
form.content.innerHTML = "please type content";
//using jquery
$('#element').html("please type content");
それが役に立てば幸い。