Das Bereitstellen statischer Dateien kann auf verschiedene Arten erfolgen. Hier sind meine Notizen zu mir selbst:
- Fügen Sie ein
static/my_app/
Verzeichnis hinzumy_app
(siehe Hinweis zum Namespace unten).
- Definieren Sie ein neues Verzeichnis der obersten Ebene und fügen Sie dieses zu STATICFILES_DIRS in settings.py hinzu (beachten Sie, dass
The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting
)
Ich bevorzuge den ersten Weg und ein Setup, das dem in der Dokumentation definierten Weg nahe kommt. Um die Datei admin-custom.css
zum Überschreiben einiger Admin-Stile bereitzustellen, habe ich ein Setup wie das folgende:
.
├── my_app/
│ ├── static/
│ │ └── my_app/
│ │ └── admin-custom.css
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── static/
├── templates/
│ └── admin/
│ └── base.html
└── manage.py
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
Dies wird dann in der Vorlage wie folgt verwendet:
{% extends "admin/base.html" %}
{% load static %}
{% block extrahead %}
<link rel="stylesheet" href="{% static "my_app/admin-custom.css" %}">
{% endblock %}
Wenn Sie während der Entwicklung django.contrib.staticfiles [ed: standardmäßig installiert] verwenden, wird dies automatisch vom Runserver ausgeführt, wenn DEBUG auf True gesetzt ist [...]
https://docs.djangoproject.com/de/1.10/howto/static-files/
Bei der Bereitstellung führe ich collectstatic
statische Dateien mit nginx aus und stelle sie bereit.
Die Dokumente, die die Verwirrung für mich beseitigt haben:
STATIC_ROOT
Der absolute Pfad zu dem Verzeichnis, in dem collectstatic statische Dateien für die Bereitstellung sammelt.
... es ist kein Ort, an dem Sie Ihre statischen Dateien dauerhaft speichern können. Sie sollten dies in Verzeichnissen tun, die von den Findern von staticfiles gefunden werden. Dies sind standardmäßig Unterverzeichnisse von 'static /' app und alle Verzeichnisse, die Sie in STATICFILES_DIRS enthalten.
https://docs.djangoproject.com/de/1.10/ref/settings/#static-root
Namespace für statische Dateien
Jetzt können wir unsere statischen Dateien möglicherweise direkt in my_app / static / ablegen (anstatt ein weiteres my_app-Unterverzeichnis zu erstellen), aber es wäre tatsächlich eine schlechte Idee. Django verwendet die erste statische Datei, deren Name übereinstimmt. Wenn Sie eine statische Datei mit demselben Namen in einer anderen Anwendung hätten, könnte Django nicht zwischen ihnen unterscheiden. Wir müssen in der Lage sein, Django auf den richtigen zu zeigen, und der einfachste Weg, dies sicherzustellen, besteht darin, sie mit einem Namespace zu versehen. Das heißt, indem Sie diese statischen Dateien in einem anderen Verzeichnis ablegen, das für die Anwendung selbst benannt ist.
https://docs.djangoproject.com/de/1.10/howto/static-files/
STATICFILES_DIRS
Ihr Projekt verfügt wahrscheinlich auch über statische Assets, die nicht an eine bestimmte App gebunden sind. Zusätzlich zur Verwendung eines statischen / Verzeichnisses in Ihren Apps können Sie eine Liste von Verzeichnissen (STATICFILES_DIRS) in Ihrer Einstellungsdatei definieren, in der Django auch nach statischen Dateien sucht.
https://docs.djangoproject.com/de/1.10/howto/static-files/
from django.conf import settings
natürlich nicht vergessen