Laravel Blade vs Django Template ¿Cuál es mejor para tu proyecto?

Video thumbnail

Quiero comparar Blade, el manejador de templates en Laravel conocido como Blade, contra Django Template, el sistema de plantillas de Django llamado Django Template.

Recordemos que Django Template se asemeja bastante a Jinja, usado en frameworks como Flask o FastAPI, que no traen su propio sistema de plantillas.

Laravel Blade innova, Django Template es conservador

Laravel siempre busca innovar. Un ejemplo es la introducción de las clases condicionales, que permiten aplicar estilos fácilmente en base a condiciones.

Esto me parece mucho más expresivo que lo que tenemos en Django, donde antes debíamos quedarnos solo con condicionales básicos. Además, esta sintaxis recuerda bastante a la de frameworks modernos como Vue o Angular, mientras que Django y Jinja siguen un esquema más tradicional:

<span @class([
    'p-4',
    'font-bold' => $isActive,
    'text-gray-500' => ! $isActive,
    'bg-red' => $hasError,
])></span>

Claridad en Django Template

Lo que me gusta de Django es que es muy limpio y expresivo con sus etiquetas y filtros. Cuando no tenemos un filtro disponible, simplemente creamos un tag en la carpeta correspondiente y luego lo cargamos en el template:

djangoshopping/store/templatetags/check_if_exists.py

from django import template
from django.template.loader import get_template, TemplateDoesNotExist

register = template.Library()

@register.simple_tag
def check_if_exists(template_name):
    try:
        get_template(template_name)
        return True
    except TemplateDoesNotExist:
        return False

Y un ejemplo de uso de los pipes para realizar operaciones dinámicas en Django:

{{ value|add:"2" }}

Sin embargo, aquí encuentro un problema: existe una separación fuerte entre lo que hacemos en las vistas (controladores en Laravel) y lo que podemos hacer en las plantillas. Muchas operaciones resultan muy diferentes a como se harían en Python puro, por ejemplo, la misma concatenación o suma anterior, en Python es:

2+2

En diferencia de lo que tenemos ante, no se asemeja mucho a la sintaxis de Python.

Esto me frustra porque en Laravel todo resulta más directo.

Comparación práctica

Esta comparación surge porque estoy creando la misma tienda en línea en Laravel y en Django.

Quería cargar un template distinto para un listado de productos y permitir diferentes estilos.
En Laravel, con Blade, es cuestión de un par de líneas:

    @if ($productType && View::exists('livewire.store.product.partials.list.' . $productType->slug))
        @include('livewire.store.product.partials.list.' . $productType->slug)
    @else

En Django, tuve que crear un tag personalizado (el mostrado arruba) para comprobar si el template existe, devolver un booleano y luego usarlo en el template:

{% load check_if_exists %}

    {% if template_path %}
        {% check_if_exists template_path as exists %}
        {% if exists %}
            {% include template_path %}
        {% endif %}
    {% else %}

Esto funciona, pero lo considero más laborioso.

Ventajas y desventajas

En Django Template tenemos un esquema más organizado y cerrado, pero esto mismo hace que algunas operaciones sean más complicadas.

En Blade (Laravel) todo es más libre, aunque la sintaxis puede parecer menos expresiva o “más fea” en comparación.

Conclusión

  • Al final, depende del estilo y preferencias de cada programador.
  • A mí me gusta la versatilidad de Laravel, que me deja decidir si quiero resolver algo rápido en la vista, sin tanto lío.
  • En Django también se puede, pero requiere más pasos.
  • Por eso hay que hacer estas comparaciones: para ver qué tecnología conviene más según el proyecto.

Acepto recibir anuncios de interes sobre este Blog.

Comparamos un ejemplo realizado en Laravel Blade y su equivalente en Django Template.

| 👤 Andrés Cruz

🇺🇸 In english