Dies ist wahrscheinlich eine dumme Frage, aber es klickt einfach nicht in meinem Kopf.
In Django besteht die Konvention darin, alle Ihre statischen Dateien (z. B. CSS, JS), die für Ihre App spezifisch sind, in einem Ordner namens " Statisch" abzulegen . Die Struktur würde also so aussehen:
mysite/
manage.py
mysite/ --> (settings.py, etc)
myapp/ --> (models.py, views.py, etc)
static/
In habe mysite/settings.py
ich:
STATIC_ROOT = 'staticfiles'
Also, wenn ich den Befehl ausführe:
python manage.py collectstatic
Es wird ein Ordner erstellt, der staticfiles
auf der Stammebene aufgerufen wird (also dasselbe Verzeichnis wie myapp/
).
Was ist der Sinn davon? Erstellt es nicht nur eine Kopie aller meiner statischen Dateien?
quelle
Statische Django-Dateien können sich an vielen Stellen befinden. Eine Datei, die so bereitgestellt wird, wie sie von vielen Orten stammen
/static/img/icon.png
könnte . Standardmäßig:FileSystemFinder
wirdimg/icon.png
in jedem von suchenSTATICFILES_DIRS
,AppDirectoriesFinder
wirdimg/icon.png
imstatic
Unterordner in jedem Ihrer suchenINSTALLED_APPS
. Auf diese Weise können Bibliotheken wie Django Admin Ihrer App eigene statische Dateien hinzufügen.Jetzt: Dies funktioniert nur, wenn Sie
manage.py runserver
mit DEBUG = 1 ausführen . Wenn Sie live gehen, werden die statischen Assets vom Django-Prozess nicht mehr bereitgestellt. Es wäre ineffizient, Django zu verwenden, um diese zu bedienen. Es gibt speziellere Tools dafür.Stattdessen sollten Sie Folgendes tun:
static
irgendwo auf Ihrem Webserver oder in einem Dateispeicher eines Drittanbieters)/static/*
direkt aus diesem Verzeichnis bereitgestellt wird, und leiten Sie alle anderen Anforderungen an Django weiter.collectstatic
ist ein vorgefertigtes Skript, das dieses Verzeichnis für Sie vorbereitet, sodass Sie es direkt mit Ihrem Bereitstellungsskript verbinden können.quelle
In der Produktionsinstallation möchten Sie dauerhafte URLs haben. Die URL ändert sich nur, wenn sich der Dateiinhalt ändert.
Dies soll verhindern, dass Clients beim Öffnen einer Webseite von Django aus eine falsche Version der CSS- oder JS-Datei auf ihrem Computer haben. Django staticfiles erkennt Dateiänderungen und aktualisiert URLs entsprechend, sodass der Webbrowser bei Änderungen der CSS- oder JS-Datei die neue Version herunterlädt.
Dies wird normalerweise erreicht, indem dem Dateinamen während des
collectstatic
Laufs MD5-Hash hinzugefügt wird.Bearbeiten: Siehe auch die zugehörige Antwort auf mehrere Apps.
quelle
settings.STATICFILES_STORAGE
standardmäßig "H5" aktiviert ist.StaticFilesStorage
Der MD5 wird also erst aktiviert, nachdem Sie ihn z. B. auf "ManifestStaticFilesStorage
Richtig" gesetzt haben. Stimmt das?Dies ist nützlich, wenn die Website mehrere Django-Apps enthält.
collectstatic
sammelt dann statische Dateien von allen Apps an einem Ort - damit sie in einer Produktionsumgebung bereitgestellt werden können.quelle