Ответ 1
Нет, но вы можете использовать {{ block.super }}
:
{% block extra_head_content %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="/static/css/account.css" />
{% endblock %}
Скажем, у меня есть три файла шаблона html, показанные ниже. HTML минимален, чтобы проиллюстрировать эту точку.
Возможно ли каким-то образом вставить блок с именем extra_head_content внутри блока, уже названного extra_head_content. Идея состоит в том, чтобы позволить шаблону третьего уровня предоставить блок с именем extra_head_content. Шаблон над ним принимает этот контент, добавляет его в свой блок с именем extra_head_content и предоставляет этот объединенный блок его родительскому шаблону.
По сути, я ищу блокировку блоков через наследуемые файлы шаблонов.
Точный сценарий, который я пытаюсь решить, заключается в том, что любой шаблон должен иметь возможность добавлять дополнительные файлы javascript или css в элемент head. Однако, самый низкий шаблон не должен заботиться о том, сколько уровней вниз он вложен. Аналогично, дополнительное содержимое заголовка, предоставляемое промежуточным шаблоном, не должно быть перезаписано блочным элементом шаблона терминала.
base.html
<html>
<head>
<link rel="stylesheet" type="text/css" href="/static/css/reset.css" />
{% block extra_head_content %}{% endblock %}
</head>
<body>{% block content %}{% endblock %}
</html>
account.html
{% extends "base.html" %}
{% block extra_head_content %}
<link rel="stylesheet" type="text/css" href="/static/css/account.css" />
{% block extra_head_content %}{% endblock %}
{% endblock %}
{% block content %}
<div id="menu">...</div>
{% block account_content %}{% endblock %}
{% endblock %}
account_profile.html
{% extends "account.html" %}
{% block extra_head_content %}
<link rel="stylesheet" type="text/css" href="/static/css/edit_profile.css" />
{% endblock %}
{% block account_content %}
Welcome to your profile
{% endblock %}
Нет, но вы можете использовать {{ block.super }}
:
{% block extra_head_content %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="/static/css/account.css" />
{% endblock %}
Модуль django-sekizai позволяет с легкостью добавлять к css и javascript:
#base.html
{% load sekizai_tags %}
# define your template, declaring blocks for inheriting templates:
{% block content %}
{% endblock content %}
# at the bottom of the body:
{% render_block "js" %}
</body>
</html>
#my_template.html
{% extends "base.html" %}
{% load sekizai_tags %}
{% block content %}
# content goes here...
# so does the addtoblock tag
{% addtoblock "js" %}
<script src="my/awesome/script.js"></script>
{% endaddtoblock %}
{% endblock content %}
# Note no addtoblock tags outside the block-endblock tags
sekazai docs разъясняют оговорки об использовании этой системы, а именно: