Saltar a contenido
  • son cadenas de textos como HTML
  • sirven para separar la parte lógica de la parte visual de un documento web
  • hay muchas formas de usar plantillas
  • por lo general un proyecto tiene varias plantillas y para ser mas ordenados podriamos crear una carpeta para eso.

Cargadores de plantillas (Loaders y render)

Usar render() hace que el código sea más corto, más legible y más fácil de mantener. Solo deberías usar loader.get_template() si necesitas personalizar el sistema de plantillas de manera avanzada.

render()

settings.py - en el bloque de TEMPLATES/DIRS: aqui va la URL de la direccion de la carpeta con los templates que vamos a crear. **views.py ** * Importamos * from django.shortcuts import render * definimos la vista:

def saludo (request,nombre):

     return render(request, 'Hola.html',{'nombre':nombre})

urls.py - añadimos el path para la vista creada - path('Saludo/<nombre>/', saludo ), html - donde queramos poner el paso de parametros lo aremos con: {{}} - <h1>Hola a todos, soy {{nombre}} {{apellido}}  esta en mi primera plantilla</h1>

Loaders()

Se hace exactamente lo mismo que el render() solo cambia en el views.py

  • from django.template import loader
def saludo (request,nombre,apellido):

     plantilla=loader.get_template('hola.html') #cargamos la plantilla

     contexto={'nombre':nombre , 'apellido':apellido } #creamos el diccionario de contexto

     return HttpResponse(plantilla.render(contexto,request))

mis conclusiones: - este metodo van mas lineas de codigo definiendo 2 elementos principales - plantilla (cargamos el html) - contexto (diccionario)


HTML (control, bucles, filtros)

  • https://docs.djangoproject.com/en/5.1/ref/templates/builtins/
  • arriba puedes consultar el carajal de filtros y tambien sobre mas estructuras de control
  • no es recomendable abusar de estructuras de control de flujo en el html, es limitados los casos en los que se puede hacer eso ten en cuenta esto.
  • podemos acceder a un elemento de la lista con la nomeclatura del punto en lugar de la forma tradicional de python mi_lista[1]

    • <li>{{list_games.1}}</li>

    Podemos acceder a muchas cosas con Django desde la plantilla HTML y se maneja bajo un orden jerárquico de llamada - Diccionario - Atributos - Metodos - indice de lista

Bucles y Condicionales

  • Podemos usar bucles, condicionales desde la plantilla HTML
 <ul>

        {% for game in list_games %}

            <li><p> {{game}}<br> </p> </li>

        {% endfor%}

    </ul>

Ejemplo 2: uso de if para mostrar algo cuando la lista esta vacía.

 {% if list_games %}

            {% for game in list_games %}

                <li><p> {{game}}<br> </p> </li>

            {% endfor%}

        {% else %}

            <p>NO hay elementos que mostrar</p>

        {% endif %}

Operadores de comparación

 {% if nombre_persona == "Jordan" %} 

         <p>Si el nombre que ingresaste es del programador</p>

        {% else %}

          <p>NO, el nombre que ingresaste no es el del programador</p>

    {% endif %}

nota ojo aqui no tienes que volver a poner el {{}} para llamar a un atributo del view

Comentarios

{% coment %}
    ESTO ES UN COMENTARIO de 2 o mas lineas 
     EN EL HTML POR DJANGO
        :D
{% endcoment %}

{#ESTO ES UN COMENTARIO DE UNA SOLA LINEA DE CODIGO #}

Filtro en la plantilla

Es lo mismo que los métodos especiales que se usan en los String como el upper(convertir en mayuscula) pero su sintaxis cambia y hay multitud de Filtros. sintaxis tradicional: nombre_persona.upper sintaxis: <p> nombre_pesona|upper </p>

Encadenar filtros poner solo la primer letra y cambiarlo a minuscula (aqui aplicaremos 2 fitros encaenados) `<li>{{el_tema|first|lower}} </li>

nota existe un carajal de filtros podemos consultar aqui: https://docs.djangoproject.com/en/5.1/ref/templates/builtins/


Plantillas incrustadas

una pagina web en un html esta compuesto por otros html