Я теж натрапив на ту ж потребу в повторному {% block%} файлах моїх шаблонів. Проблема полягає в тому, що я хочу використовувати Django {% block%} в будь-якому випадку умовного режиму Django, і я хочу, щоб {% block%} перезаписався наступними файлами, які можуть розширити поточний файл. (Отже, у цьому випадку те, що я хочу, - це, безумовно, більше блоку, ніж змінної, оскільки технічно я не використовую його повторно, воно просто з’являється на будь-якому кінці умовного.
Проблема:
Наступний код шаблону Django призведе до помилки синтаксису шаблону, але я думаю, що дійсне "хочу" мати визначений {% block%} повторний використання в умовному (IE, чому аналізатор синтаксису аналізатора Django на BOTH закінчується умовного, чи не слід це лише підтверджувати ІСТИЧНУ умову?)
# This example shows a {{ DEBUG }} conditional that loads
# Uncompressed JavaScript files if TRUE
# and loads Asynchronous minified JavaScript files if FALSE.
# BASE.html
{% if DEBUG %}
<script src="{{MEDIA_URL}}js/flatfile.1.js"></script>
<script src="{{MEDIA_URL}}js/flatfile.2.js"></script>
<script src="{{MEDIA_URL}}js/flatfile.3.js"></script>
<script type="text/javascript">
{% block page_js %}
var page = new $site.Page();
{% endblock page_js %}
</script>
{% else %}
<script type="text/javascript">
// load in the PRODUCTION VERSION of the site
// minified and asynchronosly loaded
yepnope([
{
load : '{MEDIA_URL}}js/flatfiles.min.js',
wait : true,
complete : function() {
{% block page_js %} // NOTE THE PAGE_JS BLOCK
var page = new $site.Page();
{% endblock page_js %}
}
}
)];
</script>
{% endif %}
# ABOUT.html
{% extends 'pages/base.html' %}
{% block page_js %}
var page = new $site.Page.About();
{% endblock page_js %}
Рішення:
Ви можете використовувати {% include%}, щоб умовно вставити {% block%} більше одного разу. Це працювало для мене, тому що перевірка синтаксису Django включає лише ПРАВДУ {% include%}. Дивіться результат нижче:
# partials/page.js
{% block page_js %}
var page = new $site.Page();
{% endblock %}
# base.html
{% if DEBUG %}
<script src="{{MEDIA_URL}}js/flatfile.1.js"></script>
<script src="{{MEDIA_URL}}js/flatfile.2.js"></script>
<script src="{{MEDIA_URL}}js/flatfile.3.js"></script>
<script type="text/javascript">
{% include 'partials/page_js.html' %}
</script>
{% else %}
<script type="text/javascript">
yepnope([
{
load : '{MEDIA_URL}}js/flatfiles.min.js',
wait : true,
complete : function() {
{% include 'partials/page_js.html' %}
}
}
)];
</script>
{% endif %}