Django: esegue l'override e l'estensione di un modello di app


Answers

Come aggiornamento poiché questa sembra essere una domanda popolare. Ho usato l' app di overtrain senza problemi. Fornisce una nuova finestra di parole chiave che consente di estendere i modelli con lo stesso nome.

Ed è facile da installare con pip:

 pip install -U django-overextends
Question

Se si desidera eseguire l'override di un modello fornito con un'app in django (in app / templates / app /), creare un modello con lo stesso nome in un'altra directory, che il caricatore di template controlla prima della dir del modello dell'app. Se si desidera ignorare determinati blocchi del modello, è necessario copiare anche l'intero modello di annuncio che modifica tale blocco, che in realtà non è molto ASCIUTTO.

Qualcuno conosce un modo per sovrascrivere il modello originale, mentre nello stesso momento lo estende, in modo tale da dover semplicemente ignorare il blocco specifico che si desidera modificare? (la cosa sta facendo questo senza cambiare il nome del modello, perché in alcuni casi potrebbe essere necessario cambiare la vista per farlo funzionare con un altro modello)

EDIT: Come ha sottolineato Adam Taylor nei commenti di Django 1.9 su questo è possibile senza alcun hack.




Un modo semplice per farlo è questo:

Supponiamo che tu voglia estendere e sovrascrivere django / contrib / admin / templates / admin / change_form.html.

Innanzitutto, copia il file change_form.html originale nella directory del modello della tua app e rinominalo come myapp / templates / admin / original_change_form.html. (Puoi anche farlo come link simbolico.)

In secondo luogo, crea il tuo change_form.html in myapp / templates / admin. In cima a tutto, inserisci quanto segue:

{% extends "admin/original_change_form.html" %}

Semplice!




Nella wiki di Django, Simon Willison presenta un trucco per ottenere l'effetto "modello autoestinguente". Non è direttamente applicabile se stai usando il caricatore di template app_directories , però.

Il collegamento di directory di modelli di app all'interno di una nuova directory potrebbe essere un trucco.






Related