Как обрабатывать переменные при наследовании шаблонов
-
05-07-2019 - |
Вопрос
Я просто хочу определить атрибут id тега body в дочернем шаблоне.Первое решение работает отлично:
база.html:
[body{% block bodyid %}{% endblock %}]
ребенок.html:
{% block bodyid %} id="myId"{% endblock %}
Это просто и круто!Но мне не нравится указывать id="myId" в каждом дочернем шаблоне.Я хочу просто отправить значение «myId» в родительский шаблон, где оно будет помещено в id="....".Итак, я изобретаю этот метод:
база.html:
[body{% block bodyid %} id={{ bodyid }}{% endblock %}]
ребенок.html:
{% block bodyid %}
{% with 'myId' as bodyid %}
{{ block.super }}
{% endwith %}
{% endblock %}
Но сравнивать первое решение ужасно и утомительно.Есть ли хороший способ сделать это?
Эта проблема глубже, чем управление bodyId.Думаю, я пытаюсь найти и организовать систему подшаблонов через наследование стандартного шаблона Django.
Решение
В базовом шаблоне:
<body id="{% block bodyid %}{% endblock %}">
В дочернем шаблоне:
{% block bodyid %}myId{% endblock %}
Если я правильно понимаю ваш вопрос, этого должно быть достаточно для достижения того, чего вы хотите;отправьте только фактический идентификатор (myId
) в базовый шаблон.
Другие советы
Вы, если хотите, устанавливаете это через свой код - чтобы ваши идентификаторы были частью вашего объекта контекста, и поэтому их не нужно было вводить в дочерние шаблоны, а только представления, которые их вызывают.
Затем вы можете указать базовому шаблону получить идентификатор из объекта контекста или, скорее, просто использовать для него синтаксис шаблона:
<body id="{{ body_id }}">
Конечно, здесь личные предпочтения, и это зависит от структуры ваших шаблонов и представлений, но я бы сделал именно так.