2012-03-07 2 views

ответ

12

Я предполагаю, что вы говорите об атрибуте <input readonly> в HTML/XHTML, о котором вы не говорили. (связанный поток относится к проблеме более низкого уровня с тем, как игнорировать переданный ввод формы)

Способ установки атрибута readonly (и даже любого атрибута в поле) является ключевым словом-arg в вашем шаблоне. При использовании дзиндзя, это выглядит как (html5):

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

И для XHTML или версии WTForms старше 0.6.3:

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

Сразу отметим, что «только для чтения» атрибут только намек в браузер, и это не влияет на то, что пользователь представляет. Это значит, что злоумышленник (или кто-то, пользующийся браузером с пользовательским JS a la greasemonkey или JS-консолью или DOM-деревом) может генерировать запрос POST, изменяющий значение поля, независимо от того, установлен ли атрибут readonly на тег ввода.

По этой причине атрибут readonly полезен только в качестве опции для изменения пользовательского опыта (например, отключение поля на основе какого-либо события/действия с использованием JS), а ввод, поступающий из поля «только для чтения», не является более надежным, чем любой другой ввод формы.

+13

Кажется немного глупым, вы не можете передать их в виде kwargs в виджет или что-то еще, когда вы объявляете свою форму. – coleifer

2

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) 
3

Раствор с помощью render_kw в объявлении поля формы.

my_field = fields.StringField('Label', render_kw={'readonly': True}) 
+0

И, если вы хотите получить доступ к нему из Jinja2, вы можете сделать: {%, если form.my_field.render_kw.readonly} блабло чтения {% ENDIF%} – techniao

+0

совершенных! это позволяет мне объявить его в моих формах.py, а затем отобразить форму с помощью Bootstrap. –