Yo también he encontrado la misma necesidad de repetir {% block%} en mis archivos de plantilla. El problema es que quiero que se use un Django {% block%} en cualquier caso de un condicional de Django, y quiero que el {% block%} se pueda sobrescribir por archivos posteriores que pueden extender el archivo actual. (Entonces, en este caso, lo que quiero es definitivamente más un bloque que una variable porque técnicamente no lo estoy reutilizando, solo aparece en cualquier extremo de un condicional.
El problema:
El siguiente código de plantilla de Django dará como resultado un error de sintaxis de plantilla, pero creo que es un "deseo" válido tener un {% block%} definido reutilizado en condicional (IE, ¿por qué el analizador Django valida la sintaxis en AMBOS extremos? de un condicional, ¿no debería solo validar la condición VERDADERA?)
# 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 %}
La solución:
Puede usar un {% include%} para insertar condicionalmente un {% block%} más de una vez. Esto funcionó para mí porque el verificador de sintaxis de Django incluye solo el VERDADERO {% include%}. Vea el resultado a continuación:
# 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 %}