Відповіді:
{% block javascript %}
{{ block.super }}
... more content ...
{% endblock %}
Використання block.super
працює добре при розширенні шаблону, але не так добре, коли він включає, тобто:
{% extends "base.html" %} vs. {% include "partial.html" %}
Скажіть, що ви хочете включити шаблон у середині сторінки, а також вам хотілося б додати трохи javascript у блок в кінці сторінки: виклик block.super
у включеному шаблоні завершиться.
Ср. Випуски Джанго №7324 , № 12008 , № 13399 та відповідне оновлення документації . Ср. включити примітку тегів :
Тег включення повинен розглядатися як реалізація "візуалізації цього підвидного шаблону та включення HTML", а не як "розбору цього підтембра та включення його вмісту, як якщо б він був частиною батьківського". Це означає, що між включеними шаблонами не існує спільного стану - кожен включає цілком незалежний процес візуалізації.
Блоки оцінюються до їх включення. Це означає, що шаблон, що включає блоки з іншого, буде містити блоки, які вже були оцінені та надані - не блоки, які можуть бути замінені, наприклад, шаблоном, що розширюється.
У такому випадку я рекомендую використовувати django-sekizai , які дозволяють вам робити такі речі:
{% load sekizai_tags %}
⎧ <p>Some content</p>
<p>Some content</p> | {% addtoblock "js" %}
| <script type="text/javascript">
{% include "partial.html" %} -> ⎨ alert("Hello django-sekizai");
| </script>
<p>Some more content</p> ⎩ {% endaddtoblock %}
{% render_block "js" %}
Від django-sekizai ЧИТАЙТЕ :
Основна причина, по якій я розпочав цей проект, - відсутність хорошої медіа (css / js) рамки для django та django-cms. Так, існує клас Media, який використовується у формах джанго, але насправді це не так добре працює. Зазвичай хлопці із фронтену хочуть вирішити, чи потрібно включати файли css та javascript, і вони не хочуть редагувати файли Python, щоб змінити, що ні я не хотів, щоб вони міняли свої файли Python. Для цього виникла необхідність дозволити вам редагувати вміст шаблонів, які знаходяться до того моменту, або після нього. Також я хотів видалити дублікати. В результаті я написав django-sekizai, який робить саме це. Це схоже на блоки, лише замість того, щоб успадковувати їх, ви розширюєте їх.