Это способ передать переменную в расширенный шаблон в Django?
Я хочу добавить некоторую гибкость в свой шаблон макета, но не могу найти способ сделать это.
Я ищу способ шаблона макета extend
с переменной, т.е. передать переменную в дереве шаблонов не вниз.
# views.py
def my_view_func(request):
return render(request, "child.html")
# child.html
{% extends 'layout.html' with show_sidebar=True sidebar_width_class="width_4" %}
<div>Templates stuff here</div>
# layout.html
{% if show_sidebar %}
<div class="{{ sidebar_width_class }}">
{% block sidebar %}{% endblock %}
</div>
{% endif %}
Я должен поддерживать четыре шаблона с разницей в нескольких строках кода. Например, у меня есть два шаблона, которые отличаются друг от друга классом ширины боковой панели. Я что-то делаю неправильно?
Ответы
Ответ 1
Я подозреваю, что block
- это то, что вы ищете в первую очередь.
Создайте свой блок внутри базового шаблона следующим образом:
{% block sidebar_wrapper %}
{% if sidebar %}
<div class="width{{sidebar_width}}">
{% block sidebar %}{% endblock %}
</div>
{% endif %}
{% endblock sidebar_wrapper%}
И на вашем дочернем шаблоне:
{% extends 'layout.html' %}
{% block sidebar_wrapper %}
{% with sidebar=True sidebar_width=4 %}
{{ block.super }}
{% endwith%}
{% endblock sidebar_wrapper%}
Ответ 2
Что вам нужно, так это тег шаблона include. Вы можете включить шаблон в другой шаблон и отобразить его в определенном контексте.
{% include 'layout.html' with sidebar=True sidebar_width=4 %}
Проверьте документы здесь: https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#include