2012-02-01 16 views
5

Me he dado cuenta de que mi plantilla está representando mi modelo.CharField y model.TextField sin exceso de espacio en blanco.representación de campo de texto y charfield maquina espacio en blanco adicional (Django/Python)

Por ejemplo, si entro en datos tales como ...

This  is a   test 


to see what happens. 

El campo objeto renderizado aparecerá como ...

This is a test to see what happens. 

¿Es esta una característica intencional de Django o he perdido algún filtro o parámetro en alguna parte?

He comprobado el campo en sí con algún código de depuración (print object.field) y contiene el espacio en blanco adicional, por lo que el problema está en el lado de la representación.

¿Cómo puedo permitir que el usuario ingrese párrafos de datos en TextFields? ¿Cómo puedo preservar los espacios en blanco que el usuario puede haber ingresado?

+0

Utilice alguna marca de Stackoverflow. En este momento no podemos entender tu código de ejemplo. –

Respuesta

12

Como se puede ver incluso en StackOverflow sus espacios no se muestran, esto es desde la fuente de su pregunta:

This  is a   test 


to see what happens. 

salvación de Voluntad en la base de datos como:

This  is a   test\n\n\nto see what happens. 

Tienes que problemas al representar como html:

  1. Los espacios adicionales entre las palabras se eliminan en la pantalla owser, a menos que esté entre <pre></pre> etiquetas

  2. Los saltos de línea se representarán como saltos de línea de texto sin formato, que no se muestran en el navegador a menos que entre <pre></pre> etiquetas.

Para espacios, puede utilizar such a template filter reemplazarlos con sus equivalentes entidad html: &nbsp;.

Para convertir los saltos de línea de la base de datos en saltos de línea HTML, use linebreaksbr filtros incorporados. Por ejemplo, si es {{ foo }}: test\nbar, entonces {{ foo|linebreaksbr }} rendirá: test<br />bar

  1. crear un "templatetags" carpeta en algunas de sus aplicaciones con un archivo __init__.py en ella.

  2. Guardar the snippet por ejemplo en SomeApp/templatetags/replace_tag.py

  3. de carga del filtro de plantilla en la plantilla como tal {% load replace_tag %}

  4. Combine reemplazar y linebreaksbr como tal: {{ foo|linebreaksbr|replace:" ","&nbsp;" }}

También puede hacer su propio filtro de plantilla que se procesar el texto en el HTML que necesita. En cualquier caso, consulte el custom template filter documentation para obtener información completa.

+0

¡Gran respuesta, muchas gracias! Creo que el filtro linebreaksbr es suficiente por ahora. – powlo

+1

Eso es lo que pensé al principio también – jpic

Cuestiones relacionadas