Dies ist der Artikel am 11. Tag des Adventskalenders.
Wochenende / Mitternacht Pythonista. Ich bin eine Person, die beim Zusammenstellen von Daten bei der Arbeit mit Pandas, Numpy und Scipy herumspielt. Ich bin oft auf statische Dateien gestoßen, wenn ich Django als Hobby verwendet habe, deshalb möchte ich die Stolperpunkte und Lösungen für "Menschen, die nicht verstehen, was sie nicht verstehen" zusammenfassen. Ich würde mich freuen, wenn Sie auf Fehler hinweisen könnten.
~~ Weil das offizielle Dokument unglaublich nett ist, wenn ich verrückt bin Wenn Sie es sorgfältig lesen, verstehen und Ihre Hand so bewegen, wie es ist, werden Sie es sicherlich verstehen. ~~
Statische Datei? : Denken: Was ist eine Datei, die nicht funktioniert ...?
~~ Lass uns das offizielle Dokument lesen ~~ Grob gesagt handelt es sich um CSS, JS usw. Eine Datei, die der Clientseite ohne Änderung des vom Django generierten dynamischen Inhalts vom Server bereitgestellt wird.
Funktionsweise des Webservers: MDN-Referenz
Der Begriff statische Datei selbst scheint Djangos eigene Phrase (?) Zu sein, aber ich denke, dass er ohne Schwierigkeiten verstanden werden kann, wenn Sie verstehen, wie die Webanwendung funktioniert.
Wenn Sie dies (Ihr früheres Ich) nicht verstehen, lassen Sie uns untersuchen, wie das Web funktioniert.
Statische Dateien (Bilder, JavaScript, CSS usw.) verwalten ¶ Websites müssen normalerweise zusätzliche Dateien wie Bilder, JavaScript und CSS bereitstellen. In Django werden diese Dateien als "statische Dateien" bezeichnet. Um die Verwaltung statischer Dateien zu vereinfachen, stellt Django django.contrib.staticfiles zur Verfügung. (Django offizielle Dokumentation)
Es ist ordnungsgemäß im offiziellen Dokument geschrieben. .. ..
Das Tutorial, das mit der offiziellen Django-Dokumentation geliefert wird, das DjangoGirlsTutorial (das berühmte Django-Tutorial), führt Sie in das Graben eines statischen Verzeichnisses in Ihrer App ein.
Erstellen Sie ein statisches Verzeichnis im Umfrageverzeichnis. Django sucht nach statischen Dateien.
(Django offizielle Dokumentation)
Da es sich bei den obigen Umfragen um den Namen der App handelt, weisen wir Sie an, ein Verzeichnis innerhalb der App zu erstellen.
Wo sollen die statischen Dateien im Projekt abgelegt werden? Django weiß, wo er mit seiner integrierten "admin" -App nach statischen Dateien suchen muss. Wir müssen lediglich eine statische Datei für die Blog-App hinzufügen.
Erstellen Sie dazu in der Blog-App einen Ordner namens static
djangogirls ├── blog │ ├── migrations │ ├── static │ └── templates └── mysite (DjangoGirlsTutorial)
Dadurch wird auch ein Verzeichnis in der App erstellt.
Auf der anderen Seite empfiehlt Best Practice, einen statischen Ordner direkt unter dem Projekt zu platzieren.
Dies liegt daran, dass selbst beim Erstellen eines statischen Verzeichnisses in einer App der Namespace normalerweise mit der folgenden Konfiguration verwendet wird. (* Wir werden die schlechten Fälle einführen, wenn der Namespace in der Extra Edition nicht verwendet wird.) Um es ganz klar auszudrücken: Es ist schwer persönlich zu erkennen, ob es verstreut ist. Daher ist es eine gute Idee, Best Practices zu befolgen. Vermeiden Sie es zusammen zu verwenden.
(App Name)
┣static
└ (App Name)
┣css
┣js
Ich glaube, es ist eine statische Datei, die jedem, der versucht, eine Django-App bereitzustellen, das Herz bricht. .. ..
Ich denke, dass die Webserverseite häufig für die Bereitstellung statischer Dateien in der Produktionsumgebung verantwortlich ist. Befinden sich die statischen Dateien an einem Ort? Stellen Sie sicher, dass die Liefereinstellungen korrekt sind.
Auf der Django-Seite müssen Sie nur vorsichtig sein, ob Sie statische Dateien an einem Ort haben. Der Befehl zum Kombinieren statischer Dateien an einem Ort lautet "python manage.py collect static".
Wenn Sie diesen Befehl drücken, werden die statischen Dateien, die in django.contrib.staticfiles unter der Entwicklungsumgebung sichtbar sind, in dem in settings.py festgelegten STATIC_ROOT
gesammelt.
Wenn Sie bereits eine Datei mit demselben Namen haben, wird der Zeitstempel überprüft und ein neuer gespeichert! Auf diese Weise können Sie beispielsweise Nginx einfacher konfigurieren.
Die offizielle Dokumentation zu diesem Befehl wurde nicht ins Japanische übersetzt und verbleibt auf Englisch, was möglicherweise Teil der diagonalen Lesart der offiziellen Dokumentation ist. .. ..
Achten Sie beim Erstellen eines statischen Verzeichnisses in Ihrer App auf Konflikte mit statischen Dateinamen. Wenn in Django eine statische Datei mit demselben Namen vorhanden ist, wird nur die Datei bereitgestellt, die zuerst durchsucht wurde.
Wenn eine statische Datei mit demselben Namen wie unten gezeigt vorhanden ist, weiß Django nicht, welche statische Datei bereitgestellt werden soll. In diesem Fall wird das von saticfiles gefundene ** erste ** CSS erraten.
project_root/app1/static/main.css
h1{
color: blue;
}
project_root/app2/static/main.css
h1{
color: red;
}
Selbst wenn Sie versuchen, "main.css" in jeder Vorlage wie folgt aufzurufen ...
project_root/app1/templates/app1.html
{% load static %}
<link rel="stylesheet" href="{% static "main.css" %}">
{% static "main.css" %} <!--Zum Debuggen-->
<h1>App1.html<h1>
project_root/app2/templates/app2.html
{% load static %}
<link rel="stylesheet" href="{% static "main.css" %}">
{% static "main.css" %} <!--Zum Debuggen-->
<h1>App2.html<h1>
Wie Sie sehen können, wird nur ein CSS getroffen. Ich wollte, dass App1 blauen Text und App2 roten Text hat, aber beide wurden blau.
Drücken Sie in diesem Fall den Befehl find static. Mit diesem Befehl können Sie die Suchreihenfolge von Django ermitteln.
$ python manage.py findstatic main.css
Found 'main.css' here:
C:\Users\Cuz\Desktop\Projects\static_files_sample\app1\static\main.css
C:\Users\Cuz\Desktop\Projects\static_files_sample\app2\static\main.css
Zu diesem Zeitpunkt können Sie sehen, dass das CSS von App1 oben trifft und das CSS von App2 nicht trifft.
Dies wird auch in den [offiziellen Dokumenten] beschrieben (https://docs.djangoproject.com/de/2.2/ref/contrib/staticfiles/).
Lesen Sie die offizielle Dokumentation! Lass uns lesen! Nein, lies es! Das ist alles. .. .. Wenn Sie es erneut lesen, wird es sehr detailliert geschrieben. Es wird daher empfohlen, es von Ecke zu Ecke sorgfältig zu lesen.
(Ich hatte nicht genug Zeit für Mediendateien und die Bereitstellung ... Ich werde es nächstes Jahr systematisch schreiben!)
Morgen ist @ skd_nws "Die Geschichte der in der Entwicklung verwendeten Bibliothek"! Vielen Dank!
Recommended Posts