python – WTForms – 显示属性值而不是HTML字段

我想重新使用我的WTForms表单模板:

<th>${form.name.label}</th>
<td>${form.name()}</td>
...

然而,我的编辑页面上,我想输入字段显示为正常(文本字段,SelectField等),而我的视图页面上,我想只显示属性的值,而不是用值输入字段.

编辑页面:

<th>Name:</th>
<td><input type="text" value="Current Name" name="name" id="name"/></td>

查看页面:

<th>Name:</th>
<td>Current Name</td>

我知道我可以通过form.name.data访问字段的值,但是有什么方法可以保持相同的模板,并调用form.name()并以某种方式切换是否输出< input type =“text”.. .或当前名称?

最佳答案
我创建了一个自定义小部件

from wtforms.fields import Field

class PlainTextWidget(object):
    def __call__(self, field, **kwargs):
        return field.data if field.data else ''

然后,对于我的视图页面,我添加了以下内容:

form = MyForm(obj=myDataRow)
fields = [val for val in form._fields]
for fieldName in fields:
    fieldProp = getattr(form, fieldName)
    setattr(fieldProp, 'widget', PlainTextWidget())

转载注明原文:python – WTForms – 显示属性值而不是HTML字段 - 代码日志