validators validator tutorial selectfield passwordfield python flask wtforms

python - validator - WTForms: ¿Cómo rellenar previamente un campo de área de texto?



wtforms selectfield (9)

Hola, he estado tratando de pepopular un campo de texto usando algo como esto en la plantilla.

{{form.content(value="please type content")}}

Esto funciona cuando el campo es el campo de texto principalmente porque el html acepta el valor para <input type="text"> pero lo mismo no funciona para el área de texto ... ¿Puede alguien ayudarme con esto?


Alice, parece que hay un soporte integrado en el widget de formulario para hacer lo que buscas, pero tienes razón, no funciona en este momento.

Sean y las hilquias publican trabajos decentes que sí funcionan. Esta es la forma (yuk yuk) que puedes probar

else: form.title.data=blog.title form.blogdata.data=blog.blogdata return render_template(''editblog.html'',form=form)


Defina su formulario con el campo TextArea

class MyForm(Form): name = fields.StringField(''Name'', validators=[Required()]) description = fields.TextAreaField(''Description'')

Establece el contenido del área de texto antes de volver a crear la plantilla

form = MyForm() form.description.data=''this is my textarea content!'' # This is the stuff... return render_template(''form.html'', form=form, name=name)

Renderiza los campos en tu plantilla

<form ...> {{ field(form.name, value=name) }} {{ field(form.description, rows=2) }} <button ...>Save</button> </form>


En un área de texto, deberá usar innerHTML o html () si usa jquery.

en su contexto debe ser:

form.content.innerHTML = "please type content"; //using jquery $(''#element'').html("please type content");

Espero eso ayude.


Este hilo es un poco antiguo, pero si necesita rellenar previamente el campo de área de texto con contenido dinámico, puede usar setattr y el parámetro predeterminado de esta manera:

if post.content: form = EditPostForm setattr(form, "content", TextAreaField(gettext(''Post content''), validators=[Length(max=5000)], default=post.content)) form = EditPostForm() else: form = EditPostForm()

No te olvides de importar TextAreaField.


Hace poco tuve el mismo problema, lo resolví así:

{% set f = form.content.process_data("please type content") %} {{ form.content() }}

Para una prueba, puedes intentar ejecutar el siguiente fragmento de código:

>>> import wtforms >>> import jinja2 >>> from wtforms.fields import TextAreaField >>> class MyForm(wtforms.Form): ... content = TextAreaField("Text Area") ... >>> t = jinja2.Template("""{% set f = form.content.process_data("please type content") %} ... {{ form.content() }}""") >>> >>> t.render(form=MyForm()) u''/n <textarea id="content" name="content">please type content</textarea>''


Para aquellos que intentan hacer esto dinámicamente en la plantilla jinja, establecer el valor predeterminado antes de renderizar no soluciona este problema.

En lugar de utilizar el estándar WTForms:

{{ form.content() }}

Puedes construir este elemento con HTML en bruto como:

<textarea id="FormName-content" name="FormName-content">{{ dynamic values here }}</textarea>

... y aún funcionará con la validación de WTForms.

Espero que esto ayude a alguien :)


Para los widgets de área de textarea , establezca el contenido predeterminado con el argumento default en los constructores de campo.

class YourForm(Form): your_text_area = TextAreaField("TextArea", default="please add content")

Luego, cuando renderizas:

{{form.content()}}

WTForms representará el texto predeterminado. No he podido encontrar una manera de especificar el texto predeterminado para el área de texto en el tiempo de procesamiento.


Puedes hacerlo antes de renderizar, algo como:

form.content.data = ''please type content''

Aunque soy nuevo en WTForms.


También puede rellenar previamente un campo de área de texto pasándolo a su instanciación de clase WTforms en render_template (en este ejemplo, estoy usando el marco de Flask ):

@admin.route(''/edit/<id>'', methods=[''GET'', ''POST'']) def edit(id): if request.method == ''POST'': form = ProspectForm(request.form) prospect = Prospect.objects(id=id).first() return render_template(''admin/edit.html'', prospect=prospect, prospect_form=ProspectForm(comments = prospect.comments))

Entonces, comments = prospect.comments dice "establezca el texto dentro del campo TextAreaField llamado ''comentarios'' a los datos contenidos en prospect.comments"