2012-03-07 31 views

Respuesta

12

Supongo que está hablando sobre el atributo <input readonly> en HTML/XHTML, que no es de lo que trata el hilo de discusión que vinculó. (el hilo vinculado es sobre un problema de nivel inferior con cómo ignorar la entrada de formulario pasado)

La forma de establecer un atributo de solo lectura (y de hecho cualquier atributo en un campo) es como una palabra clave-arg en su plantilla. Si el uso de Jinja, esto parece (HTML5):

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

Y para XHTML o versiones de WTForms mayores de 0.6.3:

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

Ten en cuenta que el atributo 'sólo lectura' es sólo un indicio al navegador, y no tiene impacto en lo que el usuario envía. Es decir, un usuario malintencionado (o alguien que utiliza un navegador con JS personalizado a la greasemonkey o una consola JS o un árbol DOM) podría generar una solicitud POST cambiando el valor de un campo independientemente de si el atributo de solo lectura está configurado en el etiqueta de entrada Por este motivo, el atributo readonly solo es útil como una opción para modificar la experiencia del usuario (por ejemplo, deshabilitar un campo basado en algún evento/acción usando JS) y la entrada proveniente de un campo 'readonly' no más confiable que cualquier otra forma de entrada.

+13

Parece un poco tonto que no puede pasar esto en tan kwargs al widget o algo cuando se está declarando su forma. – 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

La solución está utilizando render_kw en la declaración de campo de formulario.

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

Y, si desea acceder desde Jinja2, puede hacerlo: {% if form.my_field.render_kw.readonly} readonly blabla {% endif%} – techniao

Cuestiones relacionadas