22

在这里,他们说它不支持开箱即用。

你知道让 HTML 输入表单字段使用 WTForms 的 'readonly' 属性的方法吗?

4

4 回答 4

32

解决方案是render_kw在表单字段声明中使用。

my_field = fields.StringField('Label', render_kw={'readonly': True})
于 2017-04-04T19:08:51.520 回答
28

我假设您正在谈论<input readonly>HTML/XHTML 中的属性,这不是您链接的讨论线程的内容。(链接的线程是关于如何忽略传递的表单输入的低级问题)

设置只读属性(实际上是字段上的任何属性)的方法是作为模板中的关键字参数。如果使用 Jinja,这看起来像 (html5):

{{ form.myfield(readonly=true) }}

对于 XHTML 或早于 0.6.3 的 WTForms 版本:

{{ form.myfield(readonly="readonly") }}

请注意,'readonly' 属性只是对浏览器的提示,它对用户提交的内容没有影响。这就是说,恶意用户(或使用带有自定义 JS 的浏览器的人 a lagreasemonkey 或 JS 控制台或 DOM 树)可能会生成 POST 请求来更改字段的值,而不管 readonly 属性是否设置在输入标签。

出于这个原因,只读属性仅用作修改用户体验的选项(例如,使用 JS 禁用基于某些事件/动作的字段),并且来自“只读”字段的输入不再可信比任何其他表单输入。

于 2012-03-24T04:27:37.573 回答
4

https://wtforms-components.readthedocs.org/en/latest/#

from wtforms import Form, DateField, TextField
from wtforms_components import TimeField, read_only

class EventForm(Form):
    name = TextField('Name')
    start_date = DateField('Start date')
    start_time = TimeField('Start time')

    def __init__(self, *args, **kwargs):
        super(EventForm, self).__init__(*args, **kwargs)
        read_only(self.name)
于 2015-08-24T13:05:57.140 回答
1

另一种可能性是使用隐藏字段,然后在您的视图中,您可以打印出来{{ form.field.data }}以显示为文本。

于 2018-09-14T20:13:51.557 回答