[PYTHON] Lesen Sie die offizielle Dokumentation erst, wenn ich die statischen Dateien von Django verstanden habe

Dies ist der Artikel am 11. Tag des Adventskalenders.

Einführung

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. ~~

Q1: Was ist eine statische Datei überhaupt?

Statische Datei? : Denken: Was ist eine Datei, die nicht funktioniert ...?

A1: ** Lassen Sie uns wissen, wie das Web 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. .. ..

F2: Wo ist denn die richtige Antwort?

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.

A2: Beides ist in Ordnung

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

F3: Das Problem, dass die Produktionsumgebung CSS nicht trifft

Ich glaube, es ist eine statische Datei, die jedem, der versucht, eine Django-App bereitzustellen, das Herz bricht. .. ..

A3: Lassen Sie uns die Einstellungen des Webservers überprüfen

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. .. ..

Extra: Statischer Dateikonflikt

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. app1_app2.PNG

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/).

Zusammenfassung

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

Lesen Sie die offizielle Dokumentation erst, wenn ich die statischen Dateien von Django verstanden habe
Ich verstehe nicht mitmachen
[Django] Ich habe die umgekehrte Methode nicht ganz verstanden, also lies das offizielle Dokument.
Ich habe SHAPs Zeitung gelesen
sphinx-Lesen Sie die Docs-Integration für Apidoc
Ich kenne den Wertfehler nicht