Hacer un menú de categorías en Django

¡Seguimos con Django!
Esta vez toca hacer un menú con datos extraídos de un modelo.
Vamos a ponernos en situación. Tenemos un menú que aparece en todas las páginas, dicho menú no es mas que una lista de categorías cada una con su nombre y URL que se encuentran en la base de datos almacenadas. ¿No estáis hartos de tener que pasar siempre al template los mismos argumentos una y otra en cada vista?

Pues tiene fácil solución, crear un template tag.
Para los que controlen PHP, esto me recuerda a un poco a los include en los que haces una consulta a la base de datos y muestras los resultados a continuación.

¿Qué es un template tag?

Pues dicho así fácil es un tag que nos creamos nosotros mismos para hacer que en la plantilla con un simple {% getCategorias %} renderice otra plantilla capaz de mostrar datos que desde la vista no le hemos pasado.
¡Vamos a ello!

Crear ficheros

Primero tenemos que crear una carpeta dentro de la carpeta de la aplicación llamada templatetags y dentro creamos los ficheros __init__.py y principal_extras.py. En este caso mi aplicación se llama principal, lo suyo es que cambies el nombre del fichero por el que corresponda, esto es por simple organización.

Crear el template tag


Aquí es donde hacemos la consulta la base de datos e indicamos el nombre del template que se renderizará con los datos que retornemos. Nada difícil ¿no?

Crear el template

En la carpeta de templates de siempre nos creamos un fichero que se llama menu.html, será la plantilla que se renderizará cuando llamemos al template tag.

Como se puede ver, simplemente recorre una lista de objetos, retornada por el template tag, Categoria y va haciendo los links.

Uso


Se usa como cualquier otro tag con la salvedad de que antes hay que cargar el fichero con los tags creados.

El modelo

Aunque he descrito antes el modelo no viene mal echarle un vistazo y así tenerlo mas claro.

En resumen

Cuando llamamos al template tag creado lo que hace es llamar a la función en sí y el template indicado se rellena con los datos retornados y así nos ahorramos tener que pasar siempre el mismo argumento en todas las vistas.

En la documentación oficial de Django aparte de indicar como hacer esto hay muchas más cosas que se pueden hacer con los template tags.

2 comentarios en “Hacer un menú de categorías en Django”

  1. Hola Como estan, Quisiera hacer un menu como el de mercado libre, amazon, tucarro.com , que al darle click por ejemplo en mercadolibre cumputadoras el menu me muestre las localidades los precios las marcas y que al darle click me lo ordene que funcione como esas paginas!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *