Como mencionamos anteriormente Flask utiliza el motor de templates (platillas) Jinja2 , este es, quizás, una de las librerías más populares de Python, con ella podemos generar documentos HTML de una forma rápida y sencilla.
Al trabajar con Jinja2 debemos tener presentes 3 elementos importantes:
- Variables {{ variable }}
- Instrucciones {% instrucción %}
- Comentarios {# comentarios #}
En esta ocasión me gustaría compartir un par de ejemplos de lo que podemos hacer en nuestros templates.
Uso de variables
Si nosotros así lo deseamos podemos enviar objetos a nuestro templates.
<h2>Hola {{ username }} </h2>
<p>
Te encuentras en el curso {{ course.title }}
</p>
Uso de condiciones
{% if user_is_admin %}
<a href="{{ url_for('admin') }}">admin</a>
{% else %}
<p>No cuentas con los permisos suficientes</p>
{% endif %}
{% if user_is_admin and user.permission_level == 5 %}
<a href="{{ url_for('admin') }}">admin</a>
{% endif %}
Uso de ciclos
El único ciclo permitido por el motor Jinja2 es el ciclo for.
<ul>
{% for val in [1,2,3,4,5,6,7,8,9] %}
<li> {{ val }} </li>
{% endfor %}
</ul>
Dentro del ciclo podemos acceder a diferentes atributos del objeto loop.
- index: Interacción actual. El valor comienza en 1
- index0: Iteración actual. El valor comienza en 0 (Ideal si deseamos replicar el comportamiento de la función enumerate)
- first: Valor verdadero si nos encontramos en la primera iteración.
- last: Valor verdadero si nos encontramos en la última iteración.
- length: Número de iteraciones.
Ejemplo
<ul>
{% for val in [1,2,3,4,5,6,7,8,9] %}
<li> {{ loop.index0 }} - {{ val }} </li>
{% endfor %}
</ul>
Funciones
Aunque la integración de Flask y Jinja2 nos permite ejecutar ciertas funciones y métodos dentro de nuestro template, habrá ocasiones en las que necesitemos utilizar funciones propias, en esos casos lo que podemos hacer es enviar las funciones al template a través de la función render template.
def suma(val1, val2):
return val1 + val2
def suma_template():
return render_template('suma.html', val1=10,
val2=30, funcion=suma)
<p>
La suma de {{ val1 }} + {{ val2 }} es : {{ funcion(val1, val2) }}
</p>
-
check_circle_outlineMódulo 1 | 17 clases
Introducción y Fundamentos
expand_more-
done_all
Clase 1
Introducción al curso de Python Web
-
done_all
Clase 2
Qué es Flask
-
done_all
Clase 3
WSGI python
-
done_all
Clase 4
Entorno de desarrollo e instalación de Flask
-
done_all
Clase 5
Crear servidor de Flask
-
done_all
Clase 6
Hola mundo (primera página web)
-
done_all
Clase 7
Renderizar template
-
done_all
Clase 8
Páginas web dinámicas
-
done_all
Clase 9
Ciclos y condicionales
-
done_all
Clase 10
Plantillas Jinja2
-
done_all
Clase 11
Parámetros
-
done_all
Clase 12
¿Qué es el query string?
-
done_all
Clase 13
Lectura de queries
-
done_all
Clase 14
Archivos estáticos
-
done_all
Clase 15
Herencia de plantillas
-
done_all
Clase 16
Links
-
done_all
Clase 17
Callbacks
-
-
check_circle_outlineMódulo 2 | 7 clases
Proyecto del curso
expand_more -
check_circle_outlineMódulo 3 | 7 clases
Formularios
expand_more -
check_circle_outlineMódulo 4 | 6 clases
Modelos
expand_more -
check_circle_outlineMódulo 5 | 4 clases
Validaciones
expand_more -
check_circle_outlineMódulo 6 | 7 clases
Autenticación de usuarios
expand_more -
check_circle_outlineMódulo 7 | 10 clases
CRUD - Crear, Leer, Actualizar y Eliminar
expand_more -
check_circle_outlineMódulo 8 | 3 clases
Servidor de correos
expand_more -
check_circle_outlineMódulo 9 | 5 clases
Extras
expand_more
6 comentario(s)
Este es el error:
TypeError: suma() missing 2 required positional arguments: 'val1' and 'val2'
El código que tengo es el siguiente:
En main.py:
app.route('/suma')
Y en suma.html:
<!DOCTYPE html>
¿Pueden ayudarme, por favor?
¡Gracias!
USO DE CICLOS
El único ciclo permitido por el motor Jinja2 es el ciclo for.
No entiendo por que indica esto si el ciclo while también es permitido por el motor de plantillas
cabe recalcar. que hay que declarar primero la ruta con el DECORADOR cierto?