Передача переменных в расширенный шаблон

У меня есть шаблоны, которые впоследствии расширяют все остальные мои шаблоны.

Самым базовым шаблоном является base.html. Он включает в себя панель навигации: {% include 'includes/navigation.html' %}

Навигационная панель должна отображать разные заголовки в зависимости от установленной роли:

    {% if role == "admin" %}
        <p class="title">Welcome to the Administrator Dashboard!</p>
    {% elif role == "user" %}
        <p class="title">Welcome to your Dashboard!</p>
    {% endif %}

Из файла base.html расширяется несколько других макетов, например, 2_column.html

{% extends "layouts/base.html" %}

{% block content %}
        <div class="block block_main col-md-9">
            {% block block_main %}{% endblock block_main %}
        </div>
        <div class="block block_side col-md-3">
            {% block block_side %}{% endblock block_side %}
        </div>
{% endblock content %}

И только из этих шаблонов я строю все остальные html файлы. Например, login.html:

{% extends "layouts/2_column.html"%}

{% block block_main %}
    <h3 class="block_title">Login</h3>
    <form method="post">

        <!-- Form -->
        <div class="input-group">
            <label for="file_id">Username</label>
            <input type="text" id="username">
        </div>
    </form>

{% endblock block_main %}

Я не могу понять, как корректно передать роль до самого navigation.html. Возможно ли это вообще? Я пытался обернуть весь шаблон в:

{% with role="admin" %} {% endwith %}

но если {% extends ... %} находится внутри, он сообщает мне, что тег with не определен.

Я пытался передать переменную с помощью extends: {% extends "layouts/2_column.html" with role="publisher" %} но extends takes only one argument.

Я знаю, что могу передать переменную в view.py в методе render_template, но есть ли способ сделать это из слоя шаблона - это действительно ответственность шаблона за рисование правильного заголовка?

Не имеет значения, какой html включает/расширяет что. Вы можете и должны передавать эту информацию в views. Вы можете сделать это в представлении на основе класса или метода. Пример:

class YourView(DjangoView):
    ...
    extra_content = {'role_admin': True if user.is_superuser else False}
    ...

Затем в html:

{% if role_admin %}
    <p class="title">Welcome to the Administrator Dashboard!</p>
{% else %}
    <p class="title">Welcome to your Dashboard!</p>
{% endif %}
Вернуться на верх