Índice de bucle Jinja
Contenidos
Flask-WTForms nos ayuda a crear y utilizar formularios web con modelos sencillos de Python. WTForms se encarga de la tediosa, aburrida y necesaria seguridad requerida cuando queremos utilizar datos enviados a nuestra aplicación web a través de un usuario en Internet. WTForms hace que la validación de datos y la evasión de Cross Sight Forgery Request (CSFR) sean pan comido. Sin embargo, WTForms crea formularios feos con una validación fea. Flask-Bootstrap proporciona una capa profesional de pulido a nuestros formularios, con sombreado, resaltados y ventanas emergentes.
En el mundo real, desafortunadamente, los clientes tienen opiniones fuertes sobre sus páginas web, y pueden pedirle que modifique la apariencia por defecto que genera “quick_form”. Esta entrada del blog le muestra cómo hacerlo.
El siguiente código muestra la aplicación básica de Flask, que utiliza “quick_form” para renderizar la página web del formulario. Ten en cuenta que esta aplicación no hace nada, aunque puedes extenderla fácilmente para que persista los datos usando un ORM (por ejemplo). He basado la aplicación web en la siguiente arquitectura:
¿Cómo se pasa a Jinja?
Para pasar algunos datos de contexto al código javascript, tienes que serializarlos de forma que sean “entendidos” por javascript (concretamente JSON). También tienes que marcarlo como seguro usando el filtro seguro de Jinja, para evitar que tus datos sean htmlescaped.
¿Cómo se eliminan los espacios en blanco en Jinja?
Jinja2 nos permite controlar manualmente la generación de espacios en blanco. Se hace utilizando un signo menos – para eliminar los espacios en blanco de los bloques, comentarios o expresiones variables. Hay que añadirlo al principio o al final de la expresión dada para eliminar los espacios en blanco antes o después del bloque, respectivamente.
¿Qué es el formato Jinja?
Jinja es un motor de plantillas web para el lenguaje de programación Python. Fue creado por Armin Ronacher y tiene una licencia BSD. Jinja es similar al motor de plantillas de Django, pero proporciona expresiones similares a las de Python, a la vez que garantiza que las plantillas se evalúan en una caja de arena.
Jinja para el bucle
Este artículo puede depender excesivamente de fuentes demasiado relacionadas con el tema, lo que puede impedir que el artículo sea verificable y neutral. Por favor, ayude a mejorarlo sustituyéndolas por citas más adecuadas a fuentes fiables, independientes y de terceros. (Enero de 2020) (Aprende cómo y cuándo eliminar este mensaje de la plantilla)
Jinja es un motor de plantillas web para el lenguaje de programación Python. Fue creado por Armin Ronacher y tiene una licencia BSD. Jinja es similar al motor de plantillas de Django, pero proporciona expresiones similares a las de Python, al tiempo que garantiza que las plantillas se evalúan en una caja de arena. Es un lenguaje de plantillas basado en texto y, por tanto, puede utilizarse para generar cualquier tipo de marcado, así como el código fuente.
El motor de plantillas Jinja permite la personalización de etiquetas,[3] filtros, pruebas y globales.[4] Además, a diferencia del motor de plantillas Django, Jinja permite al diseñador de plantillas llamar a funciones con argumentos sobre objetos.
Sintaxis Jinja
Los documentos de texto son el resultado final de la renderización de plantillas. Dependiendo del consumidor final de estos documentos, la colocación de los espacios en blanco puede ser significativa. Uno de los mayores problemas de Jinja2, en mi opinión, es la forma en que las sentencias de control y otros elementos afectan a la salida de los espacios en blanco en los documentos finales.
Ahora que conocemos la importancia del problema, es hora de entender dónde se origina, para ello echaremos un vistazo a un montón de ejemplos. Luego aprenderemos cómo podemos controlar la representación de los espacios en blanco en las plantillas de Jinja2.
Aquí hay una cosa muy importante sobre Jinja2. Todos los bloques de lenguaje son removidos cuando la plantilla es renderizada pero todos los espacios en blanco permanecen en su lugar. Es decir, si hay espacios, tabuladores o nuevas líneas, antes o después de los bloques, estos se renderizarán.
Esto no se ve muy bien, ¿verdad? Hay líneas nuevas adicionales en algunos lugares. También, curiosamente, hay espacios iniciales en algunas líneas, que no se ven en la pantalla, pero que podrían romper las cosas en el futuro. En general, es difícil averiguar de dónde vienen todos los espacios en blanco.
Plantilla Jinja
Renderizar una tabla con datos en una plantilla Flask es una tarea relativamente sencilla cuando la tabla es corta, pero puede ser increíblemente difícil para tablas más grandes que requieren características como la ordenación, la paginación y la búsqueda. En este artículo voy a mostrarte cómo integrar la librería dataTables.js en tus plantillas, lo que te permitirá crear tablas completas con facilidad.
Todo el código presentado en este artículo proviene de mi repositorio flask-tables en GitHub. Aquí sólo mostraré los fragmentos interesantes, por lo que si pretendes ejecutar el código localmente debes clonar este repositorio, crear un entorno virtual e instalar el archivo requirements.txt en él.
El nombre de la plantilla es bootstrap_table.html porque voy a utilizar el framework CSS de Bootstrap para proporcionar el estilo básico de la tabla. Esto es totalmente opcional, pero en mi caso tiene sentido porque uso Bootstrap en la mayoría de mis proyectos, y quiero que mis tablas tengan un aspecto coherente con el resto de la página.
Espero que estés de acuerdo en que no hay mucho que hacer en esta plantilla. El elemento <table> se crea con dos secciones: una cabecera (dentro del elemento <thead>) y un cuerpo (dentro de <tbody>). El contenido de ambas secciones son filas de datos, ya sean cabeceras de tabla o usuarios reales. El cuerpo de la tabla se genera con un bucle for de Jinja que itera sobre el objeto de consulta que se pasó como argumento en la llamada render_template().