Ich suche nach einer Möglichkeit, eine Django Vorlage/Ansicht zu erweitern.Wie django Ansichten/Vorlagen auf eine zukunftsorientierte Weise zu erweitern
meine erste Implementierung besteht aus zwei Modellen (clients/models.py
):
class Client(models.Model):
...
class Address(models.Model):
client = models.ForeignKey(Client)
...
und seine ziemlich einfachen Vorlage (clients/detail.html
):
{{client.name}}
Address: {{client.address.street}}, {{client.address.zipcode}} {{client.address.city}}
wie meine Anwendung wächst, eine neue App geboren wurde: ' Rechnungen ".
es ist wieder sehr einfach (invoices/models.py
):
class Invoice(models.Model):
client = models.ForeignKey(clients.models.Client)
...
jetzt braucht meine Kunden Details-Ansicht Rechnungen angezeigt werden, so dass ich erstellen und außer Kraft setzen clients/detail.html
in meiner app 'Rechnungen'.
gut für jetzt.
später habe ich eine dritte App 'Zitate' erstellt. wieder meine Kunden details-view muss Anführungszeichen anzeigen.
Wenn ich clients/detail.html
in meinen "Kunden" erstelle, verliere ich die Fähigkeit, Rechnungen anzuzeigen.
weil die apps 'rechnungen' und 'anführungszeichen' unabhängig sind.
meine erste Idee war es, etwas wie eine SubView-Klasse zu erstellen, die "Rechnungen" und "Zitate" erweitern und dann ihre Implementierung irgendwo registrieren können.
eine Vorlage sollte wie folgt aussehen:
{{client.name}}
Address: {{client.address.street}}, {{client.address.zipcode}} {{client.address.city}}
{% for view in views %}
<h1>{{view.title}}</h1>
{{view.get_html}}
{% endfor %}
ist dies ein guter Weg, um meine Unteransichten i verwenden, um eine admin.site
-ähnliche Implementierung zu gehen und sollte für die Registrierung?
hey josvic, idealerweise möchte ich die 'clients/detail.html' frei von Wissen über 'Rechnungen' oder 'Zitate' halten. danke trotzdem. Es ist eine gute Praxis (+1) –
@mo. Genau, alle "Rechnungen" oder "Zitate" spezifischen Kenntnisse würden in die Vorlagen gehen, die Sie in der Hauptvorlage "client" einschließen. –
aber wenn ich eine andere App hinzufüge, möchte ich 'clients/detail.html' nicht noch einmal ändern.Es könnte eine Option sein, wenn ich diese Vorlage projektweit überschreibe.Denn dann kennt es jede App ... –