WTForms支持输入readonly属性?

cas*_*ual 18 html python forms readonly-attribute wtforms

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

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

Cra*_*ast 22

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

设置readonly属性(实际上是字段上的任何属性)的方法是在模板中作为keyword-arg.如果使用Jinja,这看起来像(html5):

{{ form.myfield(readonly=true) }}
Run Code Online (Sandbox Code Playgroud)

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

{{ form.myfield(readonly="readonly") }}
Run Code Online (Sandbox Code Playgroud)

请注意,'readonly'属性只是浏览器的一个提示,它对用户提交的内容没有任何影响.也就是说,恶意用户(或者使用带有自定义JS浏览器或者JS控制台或DOM树的浏览器)可以生成更改字段值的POST请求,无论是否设置了readonly属性输入标签.

出于这个原因,readonly属性仅用作修改用户体验的选项(例如,使用JS禁用基于某些事件/操作的字段),来自"只读"字段的输入不再具有可信度比任何其他形式的输入.

  • 当你宣布自己的形式时,你似乎有些愚蠢地无法将这些传递给小部件或其他东西. (18认同)

Bru*_*uno 19

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

my_field = fields.StringField('Label', render_kw={'readonly': True})
Run Code Online (Sandbox Code Playgroud)

  • 而且,如果你想从 Jinja2 访问它,你可以这样做: {% if form.my_field.render_kw.readonly } readonly blabla {% endif %} (3认同)