Render multiple templates at once in Flask Render multiple templates at once in Flask flask flask

Render multiple templates at once in Flask


You may be thinking about layouts the wrong way. Your layout is the most generic of your templates, not your most complex one. If you need little self-contained pieces of functionality then write them up just as they are and include them where they are needed.

That is to say, if you want something like this:

----------------------------------                  +--------------+  Header          |   Login      |                  +--------------+----------------------------------  Body Content (Blog)

And you also want to have a stand-alone login page like this:

----------------------------------  Header----------------------------------  +--------------+  |   Login      |  +--------------+

Then create a login partial and include it where you need it.

Example

templates/partials/login.html

<form action="/login" method="post"><!-- Your login goes here --></form>

templates/your_base.html

<!DOCTYPE html><html><head>{% block head %}{# Default HEAD content goes here with extra nested blocks for children to override if needed. #}{% endblock head %}</head><body><header>{% block header %}{% endblock header %}</header>{# Note: This assumes we *always* want a header #}{% block content %}{% endblock content %}</body></html>

templates/login.html

{% extends "your_base.html" -%}{% block content -%}{% include "partials/login.html" %}{%- endblock content %}

templates/blog.html

{% extends "your_base.html" -%}{% block header -%}{{ super() }}{# Render the default header contents here #}{% include "partials/login.html" %}{%- endblock header %}{% block content -%}{# Render your blog posts here #}{%- endblock content %}


Sean's answer works good, but if you don't want to extend blocks you can pick up a simpler solution, which i prefer more.

{% include "partials/login.html" %}

Just use it anywhere you need to include the template