Die Django-Administration ist großartig-voll ausgestattet, einfach zu bedienen, sicher für Design, solide… und etwas hässlich, was ein Nachteil sein kann, wenn Sie es in das Erscheinungsbild und das Gefühl des Restes integrieren möchten Ihrer Website. Lassen Sie uns das aussortieren.
Sagen Sie, Sie haben gerade eine Web -App mit Django und Vue.js. Für eine Vielzahl von Fällen ist es in Ordnung, den Django -Administrator für Backoffice -Zwecke zu verwenden, wie es ist, und sogar nach angemessener Einstellung von Berechtigungen an Ihren Kunden zu behandeln. Schließlich funktioniert es perfekt und kann stark mit den integrierten Werkzeugen angepasst werden, um viele Situationen abzudecken.
Also wieder, warum stören?
Es gibt jedoch eine Reihe von gültigen Gründen, um eine Integration noch einen Schritt weiter zu stellen:
Für dieses Beispiel und um uns nicht wieder zu wiederholen, werden wir die einfache Veröffentlichungsanwendung wieder aufnehmen, die wir für das Prototyping einer Web -App mit Django und Vue.js Artikel gestartet haben.
Kurz gesagt:
Wir kümmern uns nicht besonders um die Integration von Vue.js in dieser Rate, und wir werden sie hier nicht ändern.
Django -Vorlagen sind sehr vielseitig und leistungsstark und können entweder auf App -Ebene (eine Komponente der Django -Site) oder auf Standortebene erstellt werden und können sogar die Vorlagen, die mit Django geliefert werden (was wir sind, überschreiben können. Ich werde es hier tun).
Wir haben eine grundlegende Vorlage erstellt, die mit Bootstraps JavaScript- und Style -Blatt und seinen Begleitwerkzeugen, JQuery und Popper, verlinkt.
.Hier ist die Basisvorlage, die wir für die Hauptseite verwenden, nicht von dem, was wir normalerweise für eine andere Django -Site verwenden würden:
<span><span><!doctype html></span> </span><span><span><span><html</span> lang<span>="en"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><!-- Required meta tags --> </span> <span><span><span><meta</span> charset<span>="utf-8"</span>></span> </span> <span><span><span><meta</span> name<span>="viewport"</span> content<span>="width=device-width, initial-scale=1, shrink-to-fit=no"</span>></span> </span> <span><!-- Bootstrap CSS --> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"</span> integrity<span>="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"</span> crossorigin<span>="anonymous"</span>></span> </span> <span><span><span><title</span>></span>Django and Vue.js<span><span></title</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span> class<span>="bg-light"</span>></span> </span> <span><span><span><div</span> class<span>="bg-white container"</span>></span> </span> <span><span><span><h1</span>></span>Prototyping a Web App with Django and Vue.js<span><span></h1</span>></span> </span> <span><!-- Content --> </span> <span><span><span></div</span>></span> </span> <span><!-- Vue.js --> </span> <span><span><span><script</span> src<span>="https://unpkg.com/vue"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="https://unpkg.com/vue-router"</span>></span><span><span></script</span>></span> </span> <span><!-- jQuery first, then Popper.js, then Bootstrap JS --> </span> <span><span><span><script</span> src<span>="https://code.jquery.com/jquery-3.4.1.slim.min.js"</span> integrity<span>="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n"</span> crossorigin<span>="anonymous"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"</span> integrity<span>="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"</span> crossorigin<span>="anonymous"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"</span> integrity<span>="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6"</span> crossorigin<span>="anonymous"</span>></span><span><span></script</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span> </span>
Als nächstes integrieren wir dies in den Administrator und fügen eine gemeinsame Navigationsleiste über beide Enden hinzu - die Hauptseite und die Back Office!
Wie bereits erwähnt, können wir Vorlagen, einschließlich der des Administrators, überschreiben. Aufgrund des Designs von Django und nicht überraschend sind die Hauptstelle und die Backoffice zwei verschiedene Systeme mit eigenen Vorlagen, Stilblättern und Beitragspaketen. Selbst wenn sie fast identisch sein werden, müssen wir zwei verschiedene Vorlagen beibehalten - eine für die Hauptoberfläche und eine für den Admin. ein Verzeichnis für Vorlagen im Allgemeinen
aktivierenSE Wir müssen MyProject/Settings.py bearbeiten. Finden Sie zunächst die Vorlagen konstant und dieser Dirs -Schlüssel:
<span><span><!doctype html></span> </span><span><span><span><html</span> lang<span>="en"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><!-- Required meta tags --> </span> <span><span><span><meta</span> charset<span>="utf-8"</span>></span> </span> <span><span><span><meta</span> name<span>="viewport"</span> content<span>="width=device-width, initial-scale=1, shrink-to-fit=no"</span>></span> </span> <span><!-- Bootstrap CSS --> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"</span> integrity<span>="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"</span> crossorigin<span>="anonymous"</span>></span> </span> <span><span><span><title</span>></span>Django and Vue.js<span><span></title</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span> class<span>="bg-light"</span>></span> </span> <span><span><span><div</span> class<span>="bg-white container"</span>></span> </span> <span><span><span><h1</span>></span>Prototyping a Web App with Django and Vue.js<span><span></h1</span>></span> </span> <span><!-- Content --> </span> <span><span><span></div</span>></span> </span> <span><!-- Vue.js --> </span> <span><span><span><script</span> src<span>="https://unpkg.com/vue"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="https://unpkg.com/vue-router"</span>></span><span><span></script</span>></span> </span> <span><!-- jQuery first, then Popper.js, then Bootstrap JS --> </span> <span><span><span><script</span> src<span>="https://code.jquery.com/jquery-3.4.1.slim.min.js"</span> integrity<span>="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n"</span> crossorigin<span>="anonymous"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"</span> integrity<span>="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"</span> crossorigin<span>="anonymous"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"</span> integrity<span>="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6"</span> crossorigin<span>="anonymous"</span>></span><span><span></script</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span> </span>
<span>'DIRS': [], </span>
Wir müssen Djangos admin/base.html in unser Vorlagenverzeichnis in Vorlagen/admin/base.html kopieren, damit wir unsere Wrapper platzieren können.
wir bearbeiten den Code um den Containerabschnitt, damit er daraus geht:
<span>'DIRS': [os.path.join(BASE_DIR, 'templates')], </span>
<span><!-- Container --> </span><span><span><span><div</span> id<span>="container"</span>></span> </span>(...) <span><span><span></div</span>></span> </span><span><!-- END Container --> </span>
codieren einer benutzerdefinierten Administratorvorlage (Admin/Base_sit Hack)
{% block bodyheader %}{% endblock %} <span><!-- Container --> </span><span><span><span><div</span> id<span>="container"</span>></span> </span>(...) <span><span><span></div</span>></span> </span><span><!-- END Container --> </span> {% block bodyfooter %}{% endblock %}
Jetzt, da wir Zugriff auf die Administratorvorlage haben, könnten wir das Stylesheet vorantreiben oder es einfach mit einem gemeinsamen Stil mit der Hauptoberfläche lassen.
Wir pflegen zwei verschiedene Vorlagen (Haupt Benutzeroberfläche und Administrator), um im Wesentlichen dieselbe Präsentation zu machen. Zugegeben, dies ist nicht ideal, da wir explizit einen der Maximen der Softwareentwicklung brechen: Wiederholen Sie sich nicht (trocken).
Wie wir kommentiert haben, liegt dies daran, dass der Django -Administrator für die Abteilung von der Haupt Benutzeroberfläche entworfen wurde. Und daran ist nichts auszusetzen, genau wie es nichts falsch ist, über die Schachtel zu denken. Aber ja, das zwingt uns, zwei Vorlagen mit fast dem gleichen Inhalt zu verwenden.
eigentlich , im Prinzip konnten wir im Prinzip ein Vorlagenmuster entwerfen, das diese Navigationsleiste und andere gemeinsame Elemente aus der Haupt -Benutzeroberfläche und dem Administrator enthielt und sie von dieser einzelnen Quelle wiederverwendet. Aber zu diesem Zeitpunkt und für den Zweck dieses Artikels wäre dieser Ansatz etwas übertrieben. Wie auch immer, ich lasse die Idee für Sie gepflanzt. ?
Jetzt, da die Hauptoberfläche und die Administratorseite nahezu gleich aussehen, können wir unsere Integration weiter in die Integration gehen und ein gemeinsames Navigationserlebnis machen… und noch weiter einige Administratoroptionen direkt im Hauptmenü präsentieren!
Hier ist das Snippet für die Navigationsleiste:
<span><span><!doctype html></span> </span><span><span><span><html</span> lang<span>="en"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><!-- Required meta tags --> </span> <span><span><span><meta</span> charset<span>="utf-8"</span>></span> </span> <span><span><span><meta</span> name<span>="viewport"</span> content<span>="width=device-width, initial-scale=1, shrink-to-fit=no"</span>></span> </span> <span><!-- Bootstrap CSS --> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"</span> integrity<span>="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"</span> crossorigin<span>="anonymous"</span>></span> </span> <span><span><span><title</span>></span>Django and Vue.js<span><span></title</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span> class<span>="bg-light"</span>></span> </span> <span><span><span><div</span> class<span>="bg-white container"</span>></span> </span> <span><span><span><h1</span>></span>Prototyping a Web App with Django and Vue.js<span><span></h1</span>></span> </span> <span><!-- Content --> </span> <span><span><span></div</span>></span> </span> <span><!-- Vue.js --> </span> <span><span><span><script</span> src<span>="https://unpkg.com/vue"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="https://unpkg.com/vue-router"</span>></span><span><span></script</span>></span> </span> <span><!-- jQuery first, then Popper.js, then Bootstrap JS --> </span> <span><span><span><script</span> src<span>="https://code.jquery.com/jquery-3.4.1.slim.min.js"</span> integrity<span>="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n"</span> crossorigin<span>="anonymous"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"</span> integrity<span>="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"</span> crossorigin<span>="anonymous"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"</span> integrity<span>="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6"</span> crossorigin<span>="anonymous"</span>></span><span><span></script</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span> </span>
Beachten Sie den Abschnitt Dropdown-Menu, der sich um die Präsentation eines Admin-Menüs kümmert (Weitere Informationen finden Sie unter Bootstraps NAVBAR-Komponente).
.Wir führen auch eine bedingte Prüfung mit { % if user.is_authenticated %} /{ % endif %}, um zu entscheiden, ob wir das Admin -Menü anzeigen.
Denken Sie zuletzt daran, dass wir, da wir jetzt zwei verschiedene Hauptvorlagen beibehalten haben templates/admin/base_sit.html.
extra: Der Administratoranmeldebildschirm, aber gibt es immer noch ein loses Ende: den Anmeldebildschirm.
Jetzt könnten wir so etwas drehen:
… in so etwas:
Wir können etwas näher daran erreichen, indem wir die folgende Vorlage in Templtes/admin/login.html:
erstellen:<span><span><!doctype html></span> </span><span><span><span><html</span> lang<span>="en"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><!-- Required meta tags --> </span> <span><span><span><meta</span> charset<span>="utf-8"</span>></span> </span> <span><span><span><meta</span> name<span>="viewport"</span> content<span>="width=device-width, initial-scale=1, shrink-to-fit=no"</span>></span> </span> <span><!-- Bootstrap CSS --> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"</span> integrity<span>="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"</span> crossorigin<span>="anonymous"</span>></span> </span> <span><span><span><title</span>></span>Django and Vue.js<span><span></title</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span> class<span>="bg-light"</span>></span> </span> <span><span><span><div</span> class<span>="bg-white container"</span>></span> </span> <span><span><span><h1</span>></span>Prototyping a Web App with Django and Vue.js<span><span></h1</span>></span> </span> <span><!-- Content --> </span> <span><span><span></div</span>></span> </span> <span><!-- Vue.js --> </span> <span><span><span><script</span> src<span>="https://unpkg.com/vue"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="https://unpkg.com/vue-router"</span>></span><span><span></script</span>></span> </span> <span><!-- jQuery first, then Popper.js, then Bootstrap JS --> </span> <span><span><span><script</span> src<span>="https://code.jquery.com/jquery-3.4.1.slim.min.js"</span> integrity<span>="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n"</span> crossorigin<span>="anonymous"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"</span> integrity<span>="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"</span> crossorigin<span>="anonymous"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"</span> integrity<span>="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6"</span> crossorigin<span>="anonymous"</span>></span><span><span></script</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span> </span>
was wir hier machen:
Genau wie Bootstrap versendet die Django-Administratorseite auch ein eigenes Bündel von JQuery, aber zum Glück dachten die Django-Entwickler dies durch und vermeiden Konflikte mit von Benutzer gelieferten Schriften und Bibliotheken. So können wir Ihre eigene Kopie (wie wir es getan haben) sicher einfügen.
Seien Sie vorsichtig, wenn Sie mit Klassendefinitionen in Ihrem Hauptstilblatt verrückt werden, da sich dies auch auf die Administratorstelle auswirkt und seine Funktionalität auf unerwartete Weise beeinflusst. In diesem Fall können Sie immer sehen, was mit Ihren Browser -Debugging -Tools wie Chrome Devtools, Firefox -Entwickler -Tools (insbesondere Seiteninspektor) oder Safari -Entwickler -Tools vor sich geht.
Diese hier diskutierte Implementierung wird wie folgt aussehen:
Sie können den gesamten Projektcode in meinem Github -Repository Luzdealba / djangovuejs navigieren.
Während einige behaupten, dass es - ganz vernünftigerweise -, dass das Erscheinungsbild von Django nicht viel verändert werden muss, ist es auch wahr, dass die verschiedenen Endpunkte einer Site reibungslos integriert, ein guter Hack für eine verbesserte UX , ist da es einen nahtlosen Übergang zwischen den beiden und sogar eine kontrolliertere Navigation des Administrators liefern kann.
und dies ist nicht so schwierig. Sie müssen darauf achten, wie Sie den Administrator einwickeln und auch, wie Sie Bibliotheken von Drittanbietern mit Ihrem eigenen JavaScript-Code und Stilblättern mischen. Glücklicherweise können Sie etwas leicht in den Administrator integrieren, einige in den Rest der Hauptstelle und einige in beide.
Hoffentlich haben Sie einige Ideen dazu
Wenn Sie eine Ausrede benötigen, um eine Web -App zu erstellen, damit Sie mit dem Django -Administrator spielen können, lesen Sie das Tutorial der letzten Woche zum Prototyping einer Web -App mit Django und Vue.js - es ist eine Tonne Spaß. Und wenn Sie Ihre Django -Fähigkeiten weiter übernehmen möchten, verfügt die SitePoint Premium Library enthält eine Menge Ressourcen für Sie.häufig gestellte Fragen (FAQs) zum Anpassen von Django Admin mit Bootstrap
Kann ich Bootstrap mit Django Admin ohne zusätzliche Pakete verwenden? Um Bootstrap mit Django Admin ohne zusätzliche Pakete zu verwenden, ist es im Allgemeinen einfacher und effizienter, ein Paket wie Django-Admin-Bootstrap zu verwenden. Dieses Paket bietet ein Bootstrap-basiertes Thema für Django admin, sodass die Integration von Bootstrap in Django Admin einfacher ist. Es bietet außerdem zusätzliche Funktionen wie Responsive Design und Custom Form Form Rendering, die die Benutzerfreundlichkeit und Funktionalität Ihrer Administratorschnittstelle weiter verbessern können. Mit dem Administrator können Sie die Formularfelder anpassen, die zum Erstellen oder Bearbeiten von Objekten verwendet werden. Um ein Formularfeld anzupassen, müssen Sie die Methode "formfield_for_dbfield" Ihres Modelladministers überschreiben. Diese Methode sollte eine Formularfeldinstanz zurückgeben, die für das angegebene Datenbankfeld verwendet wird. Sie können die Attribute, Widgets und Validierungsverhalten des Formularfelds an Ihre Anforderungen anpassen. Um eine benutzerdefinierte Ansicht hinzuzufügen, müssen Sie eine Methode in Ihrem Modelladministrator definieren, die die Ansichtslogik übernimmt. Diese Methode sollte eine Anforderung als einziger Parameter annehmen und eine Antwort zurückgeben. Sie können diese Methode dann einer URL zuordnen, indem Sie der Methode "get_urls" Ihres Modelladministers ein URL -Muster hinzufügen. Dadurch wird die Ansicht über die Admin -Schnittstelle zugänglich. Auf der Seite "Admin -Änderungsliste" angezeigt. Um die Anzeige der Liste anzupassen, können Sie das Attribut "list_display" Ihres Modelladministrators auf eine Liste der Feldnamen festlegen, die Sie anzeigen möchten. Sie können auch Methodennamen in diese Liste einbeziehen, die die entsprechende Methode für jedes Objekt aufrufen und das Ergebnis anzeigen.
Das obige ist der detaillierte Inhalt vonSo können Sie den Django -Administrator mit Bootstrap neu gestalten und anpassen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!