2012-02-12 21 views
18

Non riesco a capire come modificare i blocchi dai modelli inclusi utilizzando Jinja2. Ecco un esempio in cui utilizzo tre file.Ereditarietà Jinja2 con blocchi e include

base.html:

<html>{% include "content.html" %}</html> 

content.html:

<h1>{% block title %}Title{% endblock title%}</h1> 
<div>{% block content_body %}Content Body{% endblock content_body%}</div> 

story.html

{% extends "base.html" %} 
{% block title %}story.title{% endblock title %} 
{% block content_body %}story.description{% endblock content_body %} 

Durante il rendering story.html, vado a prendere:

<html> 
<h1>Title</h1> 
<div>Content Body</div> 
</html> 

Come eseguire il rendering con i valori previsti?

+2

Dove è @ArminRonacher quando hai bisogno di lui - Ho la sensazione che ciò sia causato da "include" content.html "" sovrascrivendo il contenuto dei blocchi identicamente denominati in 'story', anche se' story' è prioritario 'base '- ma non vedo nulla nella documentazione per indicare che è previsto. –

risposta

5

Si dovrebbe guardare macros in Jinja2. Penso che questo SO question sia correlato alle tue domande.

12

base.html non viene visualizzato perché non viene richiamato da alcun modello. Che cosa si potrebbe fare è un secondo livello di estensione:

base.html:

<html>{% block html %}{% endblock %}</html> 

content.html:

{% extends "base.html" %} 
{% block html %} 
<h1>{% block title %}Title{% endblock title%}</h1> 
<div>{% block content_body %}Content Body{% endblock content_body%}</div> 
{% endblock %} 

Ancora, che è probabilmente eccessivo, è probabile trovare è sufficiente un modello di base singolo (ovvero combinare base.html e content.html in un unico modello).

+0

questa è la soluzione corretta per i modelli di controllo modelli django fanno una cosa simile per capire il concetto. – Bedros