Чи можемо ми додати {% block%}, а не перезаписати?


116

У своєму core.html у мене є блок з міткою JavaScript. Було б чудово, якщо я можу додати більше рядків до цього блоку, не перезаписуючи все, що в ньому.

Відповіді:



9

Використання 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, який робить саме це. Це схоже на блоки, лише замість того, щоб успадковувати їх, ви розширюєте їх.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.