【问题标题】:WTForms-prepopulate a textarea field with a string value?WTForms-用字符串值预填充文本区域字段?
【发布时间】:2015-09-29 08:49:33
【问题描述】:

我正在尝试使用值填充 wtforms-textareafield。

我定义了一个类:

from flask_wtf import Form
from wtforms import TextField, RadioField, TextAreaField

class Contact(Form):
    email = TextField('Name : ')
    subject = TextField('Subject:')
    description = TextAreaField('Description:', default="please add content")

我正在使用python,这里我渲染模板:

from app.mod_contact.contact import Contact
//some code
contact = Contact()
return render_template('contact/contact.html')

在模板中我这样做了:

<div class="form-group">
      {{ contact.description.label(class_="control-label col-xs-3") }}
       <div class="col-xs-6">
           {{ contact.description(class_="form-control")}}  
       </div>
</div> 

但默认文本不显示,是空白的。

我也尝试在模板上添加价值:

{{ contact.description(class_="form-control" ,value="please type content")}}

但没有结果。有人可以帮助我吗?提前致谢。

【问题讨论】:

  • 我在我的Flask 实例上检查了这个,它可以与default 关键字一起使用。我认为您的问题可能出在重新定义字段 description 的某个地方。
  • @wanderlust 我尝试重新定义但仍然是同样的问题,你还有其他想法吗?
  • 你能把完整的片段用于类声明和初始化吗?
  • @wanderlust 我编辑了我的问题:)

标签: python html class flask wtforms


【解决方案1】:

我尝试重复你的步骤,所以请找到以下完整的代码:

test.py(起始代码)

from wtforms import TextField, RadioField, TextAreaField

class Contact(Form):
    email = TextField('Name : ')
    subject = TextField('Subject:')
    description = TextAreaField('Description:', default="please add content")

app = Flask(__name__)
app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'

@app.route('/test')
def test():
    contact = Contact()
    return render_template('contact/contact.html', contact=contact)

if __name__ == '__main__':
    app.run(debug=True)

contact/contact.html

<html>
  <body>
    <div class="form-group">
          {{ contact.description.label(class_="control-label col-xs-3") }}
          <div class="col-xs-6">
              {{ contact.description(class_="form-control")}}  
          </div>
    </div> 
</body>
</html>

项目树如下:

.
├── templates
│   └── contact
│       └── contact.html
└── test.py

从给定的代码中可以看出,您应该将类​​Contact 的实例作为额外参数传递给render_template。我没有在您的代码中看到这一点,所以我假设您错过了它。在这种情况下,您也应该能够看到渲染的 TextAreaField,但您提到您看到它,但您看不到默认值。在这个 sn-p 中一切正常。

附:我假设,您希望“请添加内容”的消息在用户键入内容时自动消失。为此,您应该以这种方式更新contect.html 中的以下行:

{{ contact.description(class_="form-control", placeholder="please add content")}}  

【讨论】:

  • 我没有复制正确,因为我的表单中有参数contact=contact。我不知道为什么仍然无法工作..无论如何谢谢你的回答。
  • 试试上面的代码,然后根据你的需要进行扩展。
  • 我注意到一个奇怪的事情,如果我在 textareafield 上做一个检查元素,它有一个字符串值,但该值没有出现在页面中?
猜你喜欢
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多