您知道如何使用WTForms使HTML输入表单字段使用“readonly”属性吗?
解决方案是在表单字段声明中使用render_kw
。
my_field = fields.StringField('Label', render_kw={'readonly': True})
<input readonly>
属性,这与您链接的讨论主题不同(该链接的主题是如何忽略传递的表单输入的较低级问题)。{{ form.myfield(readonly=true) }}
对于XHTML或WTForms 0.6.3之前的版本:
{{ form.myfield(readonly="readonly") }}
请注意,'readonly'属性仅是对浏览器的提示,对用户提交的内容没有影响。这意味着,一个恶意用户(或者使用带有自定义JS的浏览器,例如Greasemonkey或JS控制台或DOM树)可以生成一个POST请求来更改字段的值,而不管输入标记上是否设置了'readonly'属性。
因此,readonly属性只有作为修改用户体验的选项时才有用(例如,使用JS基于某些事件/操作禁用字段),而来自“只读”字段的输入与任何其他表单输入一样不可信赖。
render_kw={'readonly': True}
以应用只读属性,如上面的领先答案所述。 (我只是添加了这个评论,因为你的回答得到了很多赞)。 - CodeMantlehttps://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)
{{ form.field.data }}
以显示为文本。
{% if form.my_field.render_kw.readonly } readonly blabla {% endif %}
提示:以上代码片段为Python的Jinja2模板语言。其中,if语句判断了表单组件(form)中名为my_field的字段(field)的渲染关键词(render_kw)中是否包含只读属性(readonly)。如果包含,则输出只读属性的内容(blabla)。 - techniao