Udostępnianie plików statycznych można osiągnąć na kilka sposobów; oto moje notatki dla siebie:
- dodaj
static/my_app/
katalog do my_app
(zobacz uwagę o przestrzeni nazw poniżej)
- zdefiniuj nowy katalog najwyższego poziomu i dodaj go do STATICFILES_DIRS w settings.py (zauważ, że
The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting
)
Wolę pierwszy sposób i konfigurację, która jest blisko drogi zdefiniowanego w dokumentacji , więc aby udostępnić plik admin-custom.css
do zastąpienia kilku stylów administratora, mam taką konfigurację:
.
├── 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/'
Jest to następnie używane w szablonie w następujący sposób:
{% extends "admin/base.html" %}
{% load static %}
{% block extrahead %}
<link rel="stylesheet" href="{% static "my_app/admin-custom.css" %}">
{% endblock %}
Podczas programowania, jeśli używasz django.contrib.staticfiles [ed: instalowane domyślnie], zostanie to zrobione automatycznie przez runerver, gdy DEBUG jest ustawiony na True [...]
https://docs.djangoproject.com/en/1.10/howto/static-files/
Podczas wdrażania uruchamiam collectstatic
i obsługuję pliki statyczne za pomocą nginx.
Dokumenty, które wyjaśniły mi całe zamieszanie:
STATIC_ROOT
Bezwzględna ścieżka do katalogu, w którym collectstatic będzie zbierać pliki statyczne do wdrożenia.
... to nie miejsce do przechowywania plików statycznych stałe. Powinieneś to zrobić w katalogach, które zostaną znalezione przez wyszukiwarki plików staticfiles, które domyślnie są podkatalogami aplikacji „static /” i dowolnymi katalogami, które dołączasz do STATICFILES_DIRS).
https://docs.djangoproject.com/en/1.10/ref/settings/#static-root
Przestrzenie nazw plików statycznych
Teraz być może uda nam się umieścić nasze pliki statyczne bezpośrednio w my_app / static / (zamiast tworzyć kolejny podkatalog my_app), ale w rzeczywistości byłby to zły pomysł. Django użyje pierwszego znalezionego pliku statycznego, którego nazwa pasuje, i gdybyś miał plik statyczny o tej samej nazwie w innej aplikacji, Django nie byłby w stanie ich rozróżnić. Musimy być w stanie wskazać Django właściwą, a najłatwiejszym sposobem zapewnienia tego jest umieszczenie ich w przestrzeni nazw. Oznacza to, że umieszczając te statyczne pliki w innym katalogu o nazwie odpowiadającej samej aplikacji.
https://docs.djangoproject.com/en/1.10/howto/static-files/
STATICFILES_DIRS
Twój projekt prawdopodobnie będzie zawierał również statyczne zasoby, które nie są powiązane z konkretną aplikacją. Oprócz używania katalogu static / wewnątrz aplikacji, możesz zdefiniować listę katalogów (STATICFILES_DIRS) w pliku ustawień, w którym Django będzie również szukał plików statycznych.
https://docs.djangoproject.com/en/1.10/howto/static-files/
from django.conf import settings
oczywiście nie zapomnij o