Implementación de etiquetas de plantilla personalizadas en DJango

Implementing Custom Template Tags in DJango

Table of Contents

    Las etiquetas de plantilla de Django proporcionan una forma elegante de agregar funcionalidad personalizada a las plantillas sin saturar las vistas ni incorporar lógica directamente en el HTML. Esto te permite crear elementos dinámicos y reutilizables en todo tu sitio. Como desarrollador de Django, te das cuenta rápidamente de que, si bien las etiquetas integradas son útiles, a veces necesitas un comportamiento más personalizado. Recientemente desarrollé una etiqueta personalizada para mi blog para mostrar una publicación destacada al azar. Aquí te explico cómo la creé y el papel más importante que desempeñan las etiquetas de plantilla personalizadas en Django.

    Una etiqueta de plantilla personalizada es básicamente un fragmento reutilizable de Python que agrega funcionalidad a sus plantillas. Estas etiquetas le permiten realizar acciones o extraer datos de forma dinámica, como artículos relacionados o preguntas frecuentes, de una manera ordenada y modular. El sistema de plantillas de Django es ideal para administrar sitios complejos, pero para cualquier cosa que esté fuera de sus etiquetas predeterminadas, querrá agregar las suyas propias.

    Para el blog que estoy creando (y no es un blog cualquiera, es un blog de Haydn Ellen), quería mostrar una “Publicación destacada” en la barra lateral, mostrando una publicación diferente cada vez que un usuario visita una página. Este enfoque mantiene la página visualmente fresca y alienta a los lectores a descubrir contenido nuevo. Explicaré el proceso de creación de una etiqueta de plantilla personalizada para hacer esto.

    El primer paso es organizar las etiquetas personalizadas creando un directorio en la aplicación de Django, específicamente llamado templatetags . Dentro de este directorio, necesitarás un archivo init.py para indicar que es un paquete. En mi caso, creé un archivo llamado featured_content.py donde se encuentra la función de etiqueta personalizada.

    Para definir la etiqueta en sí, es necesario importar el módulo de plantilla de Django, así como los modelos y cualquier otra biblioteca que necesite. Así era la configuración inicial de mi etiqueta de contenido destacado:

     from django import template from myapp.models import Post import random register = template.Library()

    Aquí, importo el módulo de plantilla de Django para registrar la etiqueta y traigo el modelo Post y la biblioteca aleatoria para seleccionar una publicación aleatoria. La línea register = template.Library() es la que inicializa la biblioteca de etiquetas, donde agregaré mis etiquetas y filtros personalizados.

    Para crear la etiqueta que recupera una publicación destacada aleatoria, definí una función y la decoré con @register.simple_tag. Este decorador hace que la función esté disponible como una etiqueta simple en las plantillas. Esta es la función que creé para la etiqueta:

     @register.simple_tag def get_random_global_featured_post(): featured_posts = Post.objects.filter(is_featured=True) return random.choice(featured_posts) if featured_posts else None

    Esta función hace varias cosas a la vez. Al usar Post.objects.filter(is_featured=True), recupera solo las publicaciones marcadas como “destacadas” en la base de datos. A continuación, random.choice(featured_posts) selecciona una publicación aleatoria del conjunto de consultas de publicaciones destacadas, lo que garantiza que se muestre una publicación diferente cada vez. Si no hay publicaciones marcadas como destacadas, devuelve None como alternativa, lo que evita errores al renderizar.

    Después de definir la función de etiqueta, el siguiente paso es cargarla para que esté disponible en las plantillas. En la parte superior de cualquier plantilla en la que desee utilizar la etiqueta, agregue {% load featured_content %}. Esta línea le indica a Django que busque etiquetas personalizadas en featured_content.py.

    Una vez cargada la etiqueta, llamarla en una plantilla y asignar el resultado a una variable es sencillo:

     {% get_random_global_featured_post as global_featured_post %}

    Esta línea asigna la salida de get_random_global_featured_post a una variable de plantilla denominada global_featured_post. Este paso incorpora de manera efectiva los datos de la publicación destacada al contexto de la plantilla, lo que permite que se muestre de manera dinámica. Ahora, cada carga de página recupera una publicación diferente para la sección destacada, lo que hace que el contenido de la barra lateral o del encabezado se vea actualizado.

    Finalmente, mostrar la publicación destacada dentro de la plantilla se vuelve simple con esta configuración. Puedes verificar si global_featured_post está definido y, de ser así, mostrar el título, la imagen y cualquier otro detalle. Aquí hay un fragmento que muestra cómo mostré la publicación destacada:

    Con este código, la publicación destacada se muestra solo si se recuperó correctamente una publicación aleatoria. El filtro de palabras truncadas mantiene el fragmento conciso, y la imagen, el título y el enlace permiten a los lectores hacer clic para acceder a la publicación completa.

    Aquí hay uno que construí, es el resultado del código en este tutorial (estilo con Tailwind CSS):

    La creación de esta etiqueta de plantilla personalizada me permitió mantener la lógica fuera de las vistas y las plantillas, lo que garantiza que el sitio permanezca organizado y las plantillas permanezcan limpias. La mejor parte es que esta etiqueta featured_content es completamente reutilizable en diferentes plantillas, lo que ahorra tiempo y mantiene mi proyecto organizado.

    Más allá de este ejemplo específico, el proceso de creación de etiquetas de plantilla personalizadas en Django ha abierto muchas posibilidades para la gestión de contenido de mi sitio. Ya sea que necesite mostrar de forma dinámica publicaciones relacionadas, mostrar etiquetas populares o administrar otro contenido reutilizable, las etiquetas de plantilla personalizadas en Django le permiten agregar una funcionalidad modular y clara. Al mantener la lógica fuera de las capas de vista y plantilla, las etiquetas de plantilla ayudan a garantizar un proyecto que sea fácil de mantener y ampliar.

    Si te encuentras implementando el mismo fragmento de lógica repetidamente en varias plantillas, intenta crear una etiqueta personalizada. Ahorrarás tiempo y crearás una base de código con la que sea fácil trabajar, ahora y en el futuro.

    Published: 4 weeks ago.