2011-02-25 21 views
15

Hola He estado tratando de pepopulatear un campo de texto usando algo así en la plantilla.WTForms-¿Cómo prepobular un campo textarea?

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

Esto funciona cuando el campo es el campo de texto principalmente porque el html acepta el valor de <input type="text"> pero el mismo no funciona para área de texto ... por favor alguien puede ayudar con esto?

+0

Alice, ¿qué es 'form' en este contexto? ¿Es un objeto' WTForms.Form' o es algo más? –

+0

Es un objeto WTForms.Form Sean! – Rasmus

Respuesta

16

Para los widgets 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 se rinden:

{{form.content()}} 

WTForms harán que el texto predeterminado. No he podido encontrar una forma de especificar el texto predeterminado para el área de texto en el momento del renderizado.

+2

Gracias Sean! Pero necesito hacerlo en la plantilla. Es algo así como un enlace de blog de edición. Cuando haces clic en el botón Editar contra cualquier blog, debe presentar un formulario con el título en el campo de texto (que se realiza utilizando el parámetro de valor) y el contenido del blog en el campo de área de texto. – Rasmus

+0

Hola, La definición del formulario, la función de vista y el html del formulario se pueden ver aquí: - http://pastebin.com/QC4MC84B – Rasmus

+1

' ' – mgoldwasser

-7

En un Textarea necesitarás usar innerHTML o html() si usas jquery.

en su contexto debería ser:

form.content.innerHTML = "please type content"; 

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

espero que ayude.

+0

WTForms es una biblioteca de Python del lado del servidor para representar el formato HTML - desafortunadamente, jQuery no ayudará en este contexto. –

+4

¡Gracias por intentar ayudar! – Rasmus

28

Puede hacerlo antes de la representación, algo así como:

form.content.data = 'please type content' 

Soy nuevo en WTForms sin embargo.

+0

Eso es lo que quería – diogovk

5

Alice parece haber compatibilidad integrada en el widget de formulario para hacer lo que está buscando, pero tiene razón, no funciona en este momento.

Sean y hilquias publican trabajos decentes que funcionan. Esta es la forma (puaj puaj) usted puede tratar

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

Recientemente tuve el mismo problema, he resuelto de esta manera:

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

Para una prueba, puede intentar ejecutar el fragmento de seguimiento:

>>> 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>' 
+0

Tks! funcionó como un encanto =) – edelans

+0

Esto funciona, aunque hay un pequeño problema. No estoy seguro de si hice algo mal. Lamentablemente 'process_data()' imprime un 'None' en el HTML, además de eso, es dorado. – KBN

+0

Lo siento, no leí las etiquetas de la publicación cuando escribí la respuesta. Publiqué la solución usando el módulo de plantilla Tornado, sin embargo, he actualizado la respuesta usando Jinja2. –

0

Este hilo es un poco viejo, pero si es necesario rellenar previamente el campo área de texto con contenido dinámico, se podría utilizar setattr y el parámetropor defecto de este modo:

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 olvides importar TextAreaField.

1

También puede rellenar previamente un campo de área de texto pasándolo a su instanciación de la clase WTforms en render_template (en este ejemplo estoy usando el marco 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)) 

Así, comentarios = perspectiva .comentarios dice "establece el texto dentro de las TextAreaField campo denominado 'comentarios' a los datos contenidos en prospect.comments"

0

Definir su forma con el campo TextArea

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

Establecer el contenido de área de texto antes desgarradora 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) 

Render los campos de la plantilla

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