2009-12-14 13 views
19

Il modello master nel mio Django app aspetto:blocchi annidati nei modelli di Django

{% block parent %} 
    Some text... 
    {% block child %} 
     Default content here... 
    {% endblock child %} 
    ...some more text 
{% endblock parent %} 

Ora, questo modello deve essere sovrascritto in modo che il blocco child è cambiato:

{% extends "master.html" %} 

{% block child %} 
    New content here... 
{% endblock child%} 

Tuttavia, il rendering rimane lo stesso (stampa "contenuto predefinito qui ..."). Ho perso qualcosa di ovvio o sono blocchi non annidati? (O, violando il principio DRY, ho io a ridefinire il blocco parent?)

Edit: Sto lavorando con Django 1.1, se quello che conta.

+2

Qui c'è qualcos'altro, perché (anche usando 1.1) non riesco a replicare questo problema. Per me, semplicemente l'override del blocco figlio, senza alcun riferimento al blocco genitore, ha l'effetto desiderato. –

+0

Sì, hai ragione. Vedi la mia risposta qui sotto. Grazie per averlo visto. – Boldewyn

risposta

9

OK, si tratta di un bug nel sistema di template di Django. Per la maggior parte degli altri casi, Ben James ha ragione (vedere il suo commento alla mia domanda sopra).

Nel mio caso, il blocco child era all'interno di un blocco {% ifnotequal a b %} e che rompe l'eredità blocco. Considero questo un bug, dal momento che ci sono dozzine di casi di uso naturale per tali operazioni.

The corresponding ticket.

+1

È sempre consigliabile _test_ il codice che stai postando, piuttosto che assumere che ciò che hai eliminato non influirà sul risultato. –

+0

Vero, vero ... In primo luogo avevo un tag del modello personalizzato e sospettavo che, ma dopo averlo buttato fuori non pensavo al ifnotequal. – Boldewyn

1

fare questo:

{% extends "master.html" %} 

{% block parent %} 
    {% block child %} 
     New content here... 
    {% endblock child%} 
{% endblock parent %} 
+3

Cosa succede se il blocco 'padre' di base contiene qualcosa di diverso dal blocco' child'? –

+2

Grazie per la risposta, ma sfortunatamente non è utile. Questo è in parte un mio errore, ho aggiornato l'esempio per il modello principale sopra. Problema: il motivo per il modello principale è che ci sono più dati al suo interno. Se faccio come suggerisci, ovviamente tutti questi dati aggiuntivi sono persi. – Boldewyn

Problemi correlati