我已经阅读了我能找到的所有教程和文档,但找不到我的问题。我以"companies“为例,让它变得尽可能简单。当我加载我的/company/edit/2url时,表单没有填充值。
视图
@app.route('/company/edit/<id>')
def company_edit(id):
company = {'id': 2, 'company_name': 'SomeCo'} #dummy object
form = CompanyForm(obj=company)
#form = CompanyForm(None, company) #tried this too, based on API
return render_template('company_form.html', form = form)表单对象
class CompanyForm(Form):
company_name = TextField('company_name', validators = [Required()])表单模板
<!-- extend base layout -->
{% extends "base.html" %}
{% block content %}
<form action="" method="post" name="login">
{{form.hidden_tag()}}
<p>
Company Name:<br>
{{form.company_name(size=80)}}<br>
</p>
<p><input type="submit" value="Sign In"></p>
</form>
{% endblock %}我的理解是,这应该是可行的-路由/公司/编辑/x将调用company_edit(x),它声明虚拟公司对象(稍后从数据库中提取),实例化一个表单,传递公司对象,然后呈现传递该表单的模板。表单模板应该能够将公司对象中的字段名称与表单对象中相应的输入名称相匹配,并使用值"SomeCo“填充文本字段。我是不是漏掉了什么明显的东西?
谢谢!
发布于 2013-05-26 12:15:44
传递给WTForms实例的obj关键字需要具有属性,而不是键(换句话说,它需要响应__getattr__而不是__getitem__)。如果想要将一个类似字典的对象传递到Form中,则需要使用拆分运算符(**)将字典作为关键字参数进行传递:
form = CompanyForm(**company)https://stackoverflow.com/questions/16755984
复制相似问题