Cómo especificar filas y columnas de una etiqueta usando wtforms

Construir un TextAreaField de wtforms es algo como esto:

content = wtf.TextAreaField('Content', id="content-area", validators=[validators.Required()]) 

¿Cómo puedo especificar el número de filas y columnas asociadas con este área de texto?

No se supone que lo hagas en el lugar donde declaras el widget. Lo tienes que hacer en la plantilla. Por ejemplo:

 {{form.content(rows='50',cols='100')}} 

Es necesario asegurarse de que las filas y columnas se especifiquen como una cadena.

{{form.text(cols="35", rows="20")|safe}} está funcionando

Hay un tutorial en Flask by nettuts + . Basicamente funciona de esta manera:

 from flask.ext import wtf class ContactForm(wtf.Form): content = wtf.TextAreaField("Content", [validators.Required()]) 

y en tu html:

 
{{ form.content }}

En lugar de especificar el diseño en html, puede especificarlo en su css, por ejemplo:

 form textarea#content { width: 100px; height: 100px; max-width: 100px; } 

Aquí hay un ejemplo:

 
{{ wtf.form_field(form.notes, rows=5) }}

Mucho más simple; use el argumento render_kw al crear el campo:

 port = IntegerField(u"HTTP port", validators=[DataRequired(), NumberRange(1025, 65535)], render_kw={'class': 'form-control'}) mytextarea = TextAreaField(u"Content", render_kw={'class': 'form-control', 'rows': 5}) 

Y luego renderizar el archivo:

 {{ field() }} 

Para mayor comodidad, agregue esta macro primero.

_formhelpers.html :

 {% macro render_field(field) %} 
{{ field.label }}
{{ field(**kwargs)|safe }} {% if field.errors %}
    {% for error in field.errors %}
  • {{ error }}
  • {% endfor %}
{% endif %}
{% endmacro %}

Importa esta macro y código de esta manera. deberia de funcionar.

 {% from "_formhelpers.html" import render_field %} 
{{ render_field(form.content,rows=100, cols=100) }}

Espero eso ayude !

Pude modificar las filas y columnas a través de la etiqueta render_kw en la página de formularios de python. Cuando vi por primera vez la definición de esto en el sitio web de WTForm, no supe lo que hizo hasta que vi los ejemplos de otras personas sobre el uso de esto para modificar la clase del elemento de formulario. Así que su definición me confundió hasta que empecé a experimentar con ella.

render_kw (dict): si se proporciona, un diccionario que proporciona palabras clave predeterminadas que se asignarán al widget en el momento del procesamiento. – https://wtforms.readthedocs.io/en/stable/fields.html

Utilicé esto en mi página de formularios.

 current_templates_in_library = TextAreaField('current_templates_in_library', render_kw={'rows':'4'}) 

Para agregar varias tags y valores, simplemente sepárelos con una coma como esta.

 render_kw={'class':'myclass','rows':'4'} 

Entonces esto fue renderizado en el HTML. Observe el atributo de “filas” que se agregó.

  

Simplemente puede usar este widget de reemplazo que está recordando los valores predeterminados para la representación:

 import wtforms.widgets.core class TextArea(wtforms.widgets.core.TextArea): def __init__(self, **kwargs): self.kwargs = kwargs def __call__(self, field, **kwargs): for arg in self.kwargs: if arg not in kwargs: kwargs[arg] = self.kwargs[arg] return super(TextArea, self).__call__(field, **kwargs) 

Ahora puedes agregar este nuevo widget a tu campo:

 content = wtf.TextAreaField( 'Content', id='content-area', widget=TextArea(rows=50,cols=100), validators=[validators.Required()]) 

Ahora puede representar este campo sin ningún argumento adicional y obtener un área de texto de 50×100.

Miré el código y encontré que la clase de campo define tanto __new__ como __init__ . __new__ toma un montón de *args y **kargs . Por lo tanto, solo puede pasar rows=x cols=y en su creación de TextAreadField y debería funcionar. Noté que wtforms está creando una clase llamada “UnboundField” para tales casos, no sé las implicaciones de eso ya que esto causaría problemas, si los hubiera. Pero el siguiente paso para crear el TextAreaField es el mismo. (Ese control va a la llamada __init__ como antes).