Risposte:
{% block javascript %}
{{ block.super }}
... more content ...
{% endblock %}
L'uso block.super
funziona bene quando si estende un modello ma non altrettanto quando si include uno, ad esempio:
{% extends "base.html" %} vs. {% include "partial.html" %}
Supponiamo che tu voglia includere un modello al centro della tua pagina e che desideri anche aggiungere un po 'di javascript in un blocco alla fine della pagina: la chiamata block.super
nel modello incluso andrà in crash.
Cf. I numeri di Django # 7324 , # 12008 , # 13399 e il relativo aggiornamento alla documentazione . Cf. includi la nota del tag :
Il tag include dovrebbe essere considerato come un'implementazione di "visualizza questo subtemplate e includi HTML", non come "analizza questo subtemplate e includi i suoi contenuti come se fosse parte del genitore". Ciò significa che non esiste uno stato condiviso tra i modelli inclusi: ogni inclusione è un processo di rendering completamente indipendente.
I blocchi vengono valutati prima di essere inclusi. Ciò significa che un modello che include blocchi di un altro conterrà blocchi che sono già stati valutati e renderizzati, non blocchi che possono essere sovrascritti, ad esempio, da un modello estendibile.
In tal caso, ti consiglio di utilizzare django-sekizai , che ti consente di fare cose come:
{% 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" %}
Il motivo principale per cui ho iniziato questo progetto è stata la mancanza di un buon framework multimediale (css / js) in django e django-cms. Sì, c'è la classe Media usata nei moduli in django, ma in realtà non funziona così bene. Di solito i ragazzi del frontend vogliono decidere se includere file css e javascript e non vogliono dover modificare i file Python per cambiarli né io volevo che cambiassero i miei file Python. Quindi c'era la necessità di permetterti di modificare il contenuto dei modelli che sono prima o dopo il punto in cui ti trovi ora. Inoltre volevo che i duplicati fossero rimossi. Di conseguenza ho scritto django-sekizai, che fa esattamente questo. È simile ai blocchi, solo che invece di ereditarli, li estendi.