no me queda claro la diferencia entre extends e include

Pregunta de la clase:
Include y links
Juan Diego David Melo Alarcón

Juan Diego David Melo Alarcón

Pregunta
studenthace 5 años

no me queda claro la diferencia entre extends e include

2 respuestas
para escribir tu comentario
    Julio César Zaravia Paredes

    Julio César Zaravia Paredes

    studenthace 4 años

    Hola Juan Diego.

    Tuve la misma duda y comparto contigo lo que aprendí.

    Cuando usas el ++keywords

    extends
    ++ para llamar a una plantilla, esta plantilla que has llamado ++toma el control++ de tu vista. Tomemos el ejemplo con el que venimos trabajando.

    Contenido del archivo

    hello.html
    (++reducido para el ejemplo++):

    01. {% extends 'base.html' %} 02. 03. {% block title %} 04. {{ super() }} 05. Bienvenida 06. {% endblock %} 07. 08. {% block content %} 09. {% if user_ip %} 10. <h1>Hello World Platzi, tu IP es {{ user_ip }}</h1> 11. {% else %} 12. <a href="{{ url_for('index') }}">Ir a inicio</a> 13. {% endif %} 14. {% endblock %}

    Nota que llamar a

    base.html
    hace que ahora todo el contenido de
    hello.html
    gira en torno al primero
    . Puedes notar esto, ++específicamente en la línea #4++, dónde necesita utilizar el método
    super()
    para traer contenido de la plantilla PADRE
    .

    Adicionalmente ++puedes ver en la línea #8++ que se crea un bloque

    content
    que contiene (dependiendo del condicional) un Título o un Enlace. Este contenido ++SOLO++ se mostrará si nombra a este bloque
    content
    en
    base.html
    . Por lo que si revisas el código de
    base.html
    podrás ver la llamada del ++PADRE al HIJO++
    :

    El código que copio de

    base.html
    ++ha sido adaptado para el ejemplo++:

    <!DOCTYPE html> <html lang="en"> <head> <title> {% block title %} Flask Platzi | {% endblock %} </title> </head> <body> <!-- Aquí puedes ver la llamada del padre al hijo --> {% block content %} {% endblock %} </body> </html>

    Sin embargo, cuando usas el keyword

    import
    lo único que haces es ++enlazar una plantilla con otra++ y será
    hello.html
    quien tendrá el ++control++ de hacer la llamada al contenido de la otra plantilla cuando lo requiera
    . Puedes ver lo aquí:

    El código que copio de

    hello.html
    ++ha sido adaptado para el ejemplo++:

    01. {% import 'macros.html' as macros %} 02. 03. {% block content %} 04. <ul> 05. {% for todo in todos %} 06. {{ macros.render_todo(todo) }} 07. {% endfor %} 08. </ul> 09. {% endblock %}

    ++Como puedes ver en la línea #6++ es

    hello.html
    quien decide llamar y usar el macro, inclusive podrías importar
    macros.html
    y no usarlo. Cosa que no podría pasar con
    extends
    .

    Espero que te haya servido algo de lo explicado aquí.

    ¡Saludos!

    Luis Lira

    Luis Lira

    studenthace 5 años

    Puedes entender a

    extends
    como: Usará y estará dentro de.

    Por ejemplo

    {% extends 'base.html' %}
    , le estás diciendo que usará y estará dentro de la plantilla base.html, es decir, que será una extensión de la base. Y aquí es donde usarás los bloques definido en base.html para indicar dónde irá cada cosa.

    Includes, sería "quiero agregar específicamente en este lugar a este componente". El includes agrega el componente en la parte que tú quieras, puede hacerse hasta dentro de un block.

Curso de Flask

Curso de Flask

Flask es un micro-framework para el desarrollo rápido de aplicaciones web simples con Python. Aprende las principales funcionalidades de Flask, desarrolla tu primer proyecto utilizando este micro framework desde 0. Crea sistemas de login, persiste los datos de tus usuarios en Firebase, maneja templates, crea rutas y haz despliegue de tu aplicación a producción.

Curso de Flask

Curso de Flask

Flask es un micro-framework para el desarrollo rápido de aplicaciones web simples con Python. Aprende las principales funcionalidades de Flask, desarrolla tu primer proyecto utilizando este micro framework desde 0. Crea sistemas de login, persiste los datos de tus usuarios en Firebase, maneja templates, crea rutas y haz despliegue de tu aplicación a producción.