2012-03-07 33 views

Trả lời

12

Tôi giả sử bạn đang nói về thuộc tính <input readonly> trong HTML/XHTML, đó không phải là chuỗi thảo luận mà bạn đã liên kết. (chuỗi được liên kết là về vấn đề cấp thấp hơn với cách bỏ qua thông tin nhập biểu mẫu đã nhập)

Cách đặt thuộc tính chỉ đọc (và thực sự là thuộc tính trên trường) là từ khóa arg trong mẫu của bạn. Nếu sử dụng Jinja, điều này có vẻ như (html5):

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

Và đối với XHTML hoặc các phiên bản của WTForms cũ hơn 0.6.3:

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

Chỉ cần lưu ý rằng 'readonly' thuộc tính chỉ là một gợi ý cho trình duyệt và không ảnh hưởng đến những gì người dùng gửi. Điều này có nghĩa là, một người dùng độc hại (hoặc ai đó đang sử dụng trình duyệt có tùy chỉnh JS a la greasemonkey hoặc một bảng điều khiển JS hoặc một cây DOM) có thể tạo ra một yêu cầu POST thay đổi giá trị của một trường bất kể thuộc tính chỉ đọc được đặt trên thẻ đầu vào.

Vì lý do này, thuộc tính chỉ hữu ích như một tùy chọn để sửa đổi trải nghiệm người dùng (ví dụ, vô hiệu hóa trường dựa trên một số sự kiện/hành động bằng JS) và đầu vào đến từ trường 'chỉ đọc' tin cậy hơn bất kỳ đầu vào biểu mẫu nào khác.

+13

Dường như hơi ngớ ngẩn, bạn không thể chuyển những mục này dưới dạng kwargs vào tiện ích hoặc nội dung nào đó khi bạn khai báo biểu mẫu của mình. – 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

Các giải pháp được sử dụng render_kw trong khai trường mẫu.

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

Và nếu bạn muốn truy cập từ Jinja2, bạn có thể làm: {% if form.my_field.render_kw.readonly} readonly blabla {% endif%} – techniao

Các vấn đề liên quan