To jest prawdopodobnie głupie pytanie, ale po prostu nie klika mi w głowie.
W Django konwencja polega na umieszczeniu wszystkich plików statycznych (np. Css, js) specyficznych dla twojej aplikacji w folderze o nazwie static . Struktura wyglądałaby więc tak:
mysite/
manage.py
mysite/ --> (settings.py, etc)
myapp/ --> (models.py, views.py, etc)
static/
W mysite/settings.py
mam:
STATIC_ROOT = 'staticfiles'
Więc kiedy uruchamiam polecenie:
python manage.py collectstatic
Tworzy folder o nazwie staticfiles
na poziomie głównym (taki sam katalog jak myapp/
)
Jaki to ma sens? Czy nie jest to po prostu tworzenie kopii wszystkich moich plików statycznych?
źródło
Pliki statyczne Django mogą znajdować się w wielu miejscach. Plik obsługiwany tak, jakby
/static/img/icon.png
mógł pochodzić z wielu miejsc . Domyślnie:FileSystemFinder
będzie szukaćimg/icon.png
w każdymSTATICFILES_DIRS
,AppDirectoriesFinder
będzie szukaćimg/icon.png
wstatic
podfolderze w każdym z twoich plikówINSTALLED_APPS
. Dzięki temu biblioteki, takie jak Django Admin, mogą dodawać własne pliki statyczne do aplikacji.Teraz: działa to tylko wtedy, gdy uruchomisz
manage.py runserver
DEBUG = 1. Po uruchomieniu proces Django nie będzie już obsługiwał statycznych zasobów. Używanie Django do ich obsługi byłoby nieefektywne, istnieją bardziej wyspecjalizowane narzędzia przeznaczone specjalnie do tego.Zamiast tego powinieneś zrobić coś takiego:
static
katalog gdzieś na swoim serwerze internetowym lub w magazynie plików innej firmy)/static/*
bezpośrednio z tego katalogu i przekierowywał wszelkie inne żądania do Django.collectstatic
to gotowy skrypt, który przygotowuje ten katalog dla Ciebie, tak abyś mógł połączyć go bezpośrednio ze swoim skryptem wdrożeniowym.źródło
W instalacji produkcyjnej chcesz mieć trwałe adresy URL. Adres URL nie zmienia się, chyba że zmieni się zawartość pliku.
Ma to na celu zapobieganie sytuacji, w której klienci mają na swoim komputerze niewłaściwą wersję pliku CSS lub JS podczas otwierania strony internetowej z Django. Django staticfiles wykrywa zmiany plików i odpowiednio aktualizuje adresy URL, dzięki czemu w przypadku zmiany pliku CSS lub JS przeglądarka internetowa pobiera nową wersję.
Zwykle osiąga się to poprzez dodanie skrótu MD5 do nazwy pliku podczas
collectstatic
uruchamiania.Edycja: zobacz także powiązaną odpowiedź dla wielu aplikacji.
źródło
settings.STATICFILES_STORAGE
domyślnie jestStaticFilesStorage
tak, więc MD5 włączy się dopiero po tym, jak np. Ustawisz go naManifestStaticFilesStorage
, czy mam rację?Jest to przydatne, gdy w witrynie jest wiele aplikacji django.
collectstatic
zbierze wówczas pliki statyczne ze wszystkich aplikacji w jednym miejscu - tak, aby można je było udostępnić w środowisku produkcyjnym.źródło