Wie überschreibe ich eine Admin-Vorlage (z. B. admin / index.html) und erweitere sie gleichzeitig (siehe https://docs.djangoproject.com/de/dev/ref/contrib/admin/#overriding-vs-replacing) -an-admin-template )?
Erstens - Ich weiß, dass diese Frage bereits gestellt und beantwortet wurde (siehe Django: Überschreiben UND Erweitern einer App-Vorlage ), aber wie die Antwort besagt, ist sie nicht direkt anwendbar, wenn Sie den Vorlagenladeprogramm app_directories verwenden (das ist der größte Teil der Zeit).
Meine derzeitige Problemumgehung besteht darin, Kopien zu erstellen und daraus zu erweitern, anstatt direkt aus den Administratorvorlagen zu erweitern. Dies funktioniert gut, ist aber sehr verwirrend und fügt zusätzliche Arbeit hinzu, wenn sich die Admin-Vorlagen ändern.
Es könnte an ein benutzerdefiniertes Extend-Tag für die Vorlagen denken, aber ich möchte das Rad nicht neu erfinden, wenn es bereits eine Lösung gibt.
Nebenbei bemerkt: Weiß jemand, ob dieses Problem von Django selbst angegangen wird?
quelle
Antworten:
Update :
Lesen Sie die Dokumente für Ihre Version von Django. z.B
https://docs.djangoproject.com/de/1.11/ref/contrib/admin/#admin-overriding-templates https://docs.djangoproject.com/de/2.0/ref/contrib/admin/#admin-overriding -Vorlagen
Ursprüngliche Antwort von 2011:
Ich hatte vor ungefähr anderthalb Jahren das gleiche Problem und fand auf djangosnippets.org einen netten Template Loader , der dies einfach macht. Es ermöglicht Ihnen , eine Vorlage in einer bestimmten Anwendung zu erweitern, Ihnen die Möglichkeit, Ihr eigenes zu erstellen admin / index.html , die den admin / index.html Vorlage aus dem Admin - App erweitert. So was:
Ich habe ein vollständiges Beispiel für die Verwendung dieses Vorlagenladers in einem Blogbeitrag auf meiner Website gegeben.
quelle
django-apptemplates
dass er eines Tages möglicherweise nicht mehr funktioniert.Da Django 1.8 die aktuelle Version ist, müssen Sie keine Symlinks erstellen, den Administrator / die Vorlagen in Ihren Projektordner kopieren oder Middlewares installieren, wie in den obigen Antworten vorgeschlagen. Folgendes ist zu tun:
Erstellen Sie die folgende Baumstruktur (empfohlen in der offiziellen Dokumentation )
Hinweis : Der Speicherort dieser Datei ist nicht wichtig. Sie können es in Ihre App einfügen und es wird weiterhin funktionieren. Solange sein Standort von Django entdeckt werden kann. Wichtiger ist, dass der Name der HTML-Datei mit dem ursprünglichen HTML-Dateinamen von django übereinstimmen muss.
Fügen Sie diesen Vorlagenpfad zu Ihren settings.py hinzu :
Identifizieren Sie den Namen und den Block, den Sie überschreiben möchten. Dies geschieht durch einen Blick in das Verzeichnis admin / templates von django. Ich benutze virtualenv, daher ist der Pfad für mich hier:
In diesem Beispiel möchte ich das Formular zum Hinzufügen eines neuen Benutzers ändern. Die für diese Ansicht verantwortliche Vorlage lautet change_form.html . Öffnen Sie die Datei change_form.html und suchen Sie den {% block%}, den Sie erweitern möchten.
Schreiben Sie in Ihre change_form.html Folgendes :
Laden Sie Ihre Seite und Sie sollten die Änderungen sehen
quelle
../
in den "Exetends" -Pfad zu schreiben und den ursprünglichen Pfad eindeutiger anzugeben{% extends "../../admin/templates/admin/index.html" %}
. Link zur AntwortWenn Sie das überschreiben müssen
admin/index.html
, können Sie den Parameter index_template von festlegenAdminSite
.z.B
und platzieren Sie Ihre Vorlage in
<appname>/templates/admin/my_custom_index.html
quelle
{% extends "admin/index.html" %}
von my_custom_index.html aus auf die Django-Administratorvorlage verweisen, ohne sie zu kopieren. Danke dir.Mit
django
1.5 (mindestens) können Sie die Vorlage definieren, die Sie für eine bestimmte verwenden möchtenmodeladmin
Siehe https://docs.djangoproject.com/de/1.5/ref/contrib/admin/#custom-template-options
Sie können so etwas tun
Mit
change_form.html
einer einfachen HTML-Vorlage, die erweitert wirdadmin/change_form.html
(oder nicht, wenn Sie es von Grund auf neu machen möchten)quelle
Chengs 'Antwort ist richtig, jedoch kann laut den Admin-Dokumenten nicht jede Admin-Vorlage auf diese Weise überschrieben werden: https://docs.djangoproject.com/de/1.9/ref/contrib/admin/#overriding-admin-templates
Ich musste die login.html des Administrators überschreiben und daher die überschriebene Vorlage in diese Ordnerstruktur einfügen:
(ohne den Unterordner myapp im Administrator) Ich habe nicht genug Ansehen, um Cheng's Beitrag zu kommentieren. Deshalb musste ich dies als neue Antwort schreiben.
quelle
Der beste Weg, dies zu tun, besteht darin, die Django-Administratorvorlagen in Ihr Projekt einzufügen. Ihre Vorlagen wären also in,
templates/admin
während die Standard-Django-Admin-Vorlagen in wärentemplate/django_admin
. Dann können Sie Folgendes tun:templates / admin / change_form.html
Wenn Sie Bedenken haben, die Bestandsvorlagen auf dem neuesten Stand zu halten, können Sie sie in SVN-Externe oder ähnliches einbinden.
quelle
--ignore
Argument mitmakemessages
. Siehe: docs.djangoproject.com/de/dev/ref/django-admin/#makemessagesIch konnte keine einzige Antwort oder keinen Abschnitt in den offiziellen Django-Dokumenten finden, der alle Informationen enthielt, die ich zum Überschreiben / Erweitern der Standard-Admin-Vorlagen benötigte. Daher schreibe ich diese Antwort als vollständigen Leitfaden und hoffe, dass sie hilfreich ist für andere in der Zukunft.
Angenommen, die Standard-Django-Projektstruktur:
Folgendes müssen Sie tun:
In
mysite/admin.py
einer Unterklasse erstellenAdminSite
:Stellen Sie sicher, dass Sie
custom_admin_site
inadmin.py
Ihre Apps importieren und Ihre Modelle darauf registrieren, um sie auf Ihrer benutzerdefinierten Admin-Site anzuzeigen (wenn Sie möchten).In
mysite/apps.py
eine Unterklasse erstellenAdminConfig
und Satzdefault_site
zuadmin.CustomAdminSite
aus dem vorherigen Schritt:In
mysite/settings.py
Ersetzen Siedjango.admin.site
inINSTALLED_APPS
mitapps.CustomAdminConfig
(Ihrer benutzerdefinierten Admin - app Config aus dem vorherigen Schritt).In
mysite/urls.py
Ersetzenadmin.site.urls
aus der Admin - URLcustom_admin_site.urls
Erstellen Sie die Vorlage, die Sie ändern möchten, in Ihrem
templates
Verzeichnis, und behalten Sie dabei die in den Dokumenten angegebene Standardverzeichnisstruktur für Django-Administratorvorlagen bei . Wenn Sie beispielsweise Änderungen vorgenommen habenadmin/index.html
, erstellen Sie die Dateitemplates/admin/index.html
.Alle vorhandenen Vorlagen können auf diese Weise geändert werden, und ihre Namen und Strukturen finden Sie im Quellcode von Django .
Jetzt können Sie die Vorlage entweder überschreiben, indem Sie sie von Grund auf neu schreiben, oder sie erweitern und dann bestimmte Blöcke überschreiben / erweitern.
Wenn Sie beispielsweise alles so lassen möchten, wie es ist, aber den
content
Block überschreiben möchten (der auf der Indexseite die von Ihnen registrierten Apps und deren Modelle auflistet), fügen Sie Folgendes hinzutemplates/admin/index.html
:Um den ursprünglichen Inhalt eines Blocks beizubehalten, fügen
{{ block.super }}
Sie hinzu, wo immer der ursprüngliche Inhalt angezeigt werden soll:Sie können auch benutzerdefinierte Stile und Skripte hinzufügen, indem Sie die Blöcke
extrastyle
undextrahead
ändern.quelle
Ich stimme Chris Pratt zu. Aber ich denke, es ist besser, den Symlink zum ursprünglichen Django-Ordner zu erstellen, in dem sich die Admin-Vorlagen befinden:
und wie Sie sehen können, hängt es von der Python-Version und dem Ordner ab, in dem der Django installiert wurde. In Zukunft oder auf einem Produktionsserver müssen Sie möglicherweise den Pfad ändern.
quelle
Diese Seite hatte eine einfache Lösung, die mit meiner Django 1.7-Konfiguration funktionierte.
ZUERST : Erstellen Sie in der Vorlage / im Verzeichnis Ihres Projekts einen Symlink mit dem Namen admin_src zu Ihren installierten Django-Vorlagen. Für mich auf Dreamhost mit einer virtuellen Umgebung waren meine "Quell" -Django-Administratorvorlagen in:
ZWEITENS: Erstellen Sie ein Administratorverzeichnis in Vorlagen /
Die Vorlage / das Verzeichnis meines Projekts sah nun folgendermaßen aus:
DRITTE: Erstellen Sie in Ihrer neuen Vorlage / admin / ein Verzeichnis base.html mit folgendem Inhalt:
VIERTE: Fügen Sie Ihre admin favicon-admin.ico in Ihren statischen root img Ordner hinzu.
Getan. Einfach.
quelle
Fügen Sie diese Zeile für den App-Index zu einer allgemeinen Py-Datei wie url.py hinzu
für App-Modul-Index: Fügen Sie diese Zeile zu admin.py hinzu
für Änderungsliste: Fügen Sie diese Zeile zur Admin-Klasse hinzu:
für Formularvorlage für App-Module: Fügen Sie diese Zeile Ihrer Admin-Klasse hinzu
usw. und finden Sie andere in den Modulklassen des gleichen Administrators
quelle
Sie können django-overextends verwenden , das eine kreisförmige Vorlagenvererbung für Django bereitstellt.
Es stammt aus dem Mezzanine CMS, von wo Stephen es in eine eigenständige Django-Erweiterung extrahiert hat.
Weitere Informationen finden Sie unter "Überschreiben und Erweitern von Vorlagen" (http: /mezzanine.jupo.org/docs/content-architecture.html#overriding-vs-extending-templates) in den Mezzanine-Dokumenten.
Weitere Informationen finden Sie in Stephens Blog "Circular Template Inheritance for Django" (http: /blog.jupo.org/2012/05/17/circular-template-inheritance-for-django).
Und in Google Groups die Diskussion (https://groups.google.com/forum/ #! Topic / mezzanine-users / sUydcf_IZkQ), mit der die Entwicklung dieser Funktion gestartet wurde.
Hinweis:
Ich habe nicht den Ruf, mehr als 2 Links hinzuzufügen. Aber ich denke, die Links bieten interessante Hintergrundinformationen. Also habe ich nach "http (s):" einen Schrägstrich ausgelassen. Vielleicht kann jemand mit einem besseren Ruf die Links reparieren und diesen Hinweis entfernen.
quelle