2012-06-11 30 views
43

Ho un modello molto semplice (basic_template.html), e voglio riempire con dati formattati usando un altro modello parziale. Il file basic_template.html potrebbe contenere diverse cose formattate usando il modello parziale.Come si inserisce un modello in un altro modello?

Come dovrei strutturare il codice in views.py?

Il motivo per cui sto facendo questo è che più avanti verrà riempito usando Ajax. Lo sto facendo bene?

risposta

88

Si può fare:

<div class="basic"> 
{% include "main/includes/subtemplate.html" %}  
</div> 

dove subtemplate.html è un altro modello di Django. In questo subtemplate.html puoi inserire l'HTML che si otterrebbe con Ajax.

è inoltre possibile includere il modello più volte:

<div class="basic"> 
{% for item in items %} 
    {% include "main/includes/subtemplate.html" %}  
{% endfor %} 
</div> 
+0

dispiace, dimenticato di menzionare: il subtemplate potrebbe essere un'istanza più volte nel basic_template.html – WindowsMaker

+0

che è anche possibile, è possibile includere un modello in un per ciclo nel modello, vedere la risposta aggiornata. –

+1

geniale! grazie! – WindowsMaker

14

si può fare questo usando un blocco . I blocchi sono un tag Django Template che sovrascrive le sezioni di un modello che si estendono per l'estensione . Ho incluso un esempio qui sotto.

basic_template.html

<body> 
{% block 'body' %} 
{% endblock %} 
</body> 

modello che si desidera includere: (vale a dire example.html)

{% extends 'basic_template.html' %} 
{% block 'body' %} 
/* HTML goes here */ 
{% endblock %} 

views.py:

return render_to_response(template='example.html', context, context_instance) 

Questa operazione caricherà basic_template.html, ma sostituirà tutto all'interno di {% block 'body' %} {% endblock %} in basic_template.html con tutto ciò che è contenuto all'interno di {% block 'body' %} {% endblock %}.

Si può leggere di più su blocchi e l'ereditarietà dei template nella Django Docs

+0

Qual è la differenza tra il fare questo modo e facendo {% include "main/includes/example.html"%}? –

+2

@MichaelLafayette, pensa di estendere come eredita mentre includi come importazione. – Mox

+0

Ci sono vantaggi prestazionali nell'utilizzo di un approccio rispetto all'altro? L'approccio '{% include" principale/include/example.html "%}' sembra più semplice (afferma * KISS *). –

Problemi correlati