Buduję aplikację, używając Django jako mojego konia roboczego. Do tej pory wszystko było dobrze - określone ustawienia db, skonfigurowane katalogi statyczne, adresy URL, widoki itp. Ale problemy zaczęły się pojawiać w momencie, gdy chciałem wyrenderować własne piękne i niestandardowe strony 404.html i 500.html.
Przeczytałem dokumenty na temat niestandardowej obsługi błędów i ustawiłem niezbędne konfiguracje w UrlsConf, utworzyłem odpowiednie widoki i dodałem pliki 404.html i 500.html do katalogu szablonów mojej aplikacji (również określonego w pliku settings.py).
Ale doktorzy mówią you can actually view custom error views until Debug is Off
, więc wyłączyłem to, aby przetestować swoje rzeczy, i to wtedy rzeczy szaleją!
Nie tylko nie mogę wyświetlić niestandardowego pliku 404.html (w rzeczywistości ładuje się, ale ponieważ każda z moich stron błędów zawiera graficzny komunikat o błędzie - jak jakiś fajny obraz), źródło strony błędów ładuje się, ale nic innego się nie ładuje! Nawet niepowiązany CSS lub JavaScript!
Zasadniczo po ustawieniu DEBUG = False
wszystkie widoki zostaną załadowane, ale żadna powiązana treść (CSS, JavaScript, obrazy itp.) Nie będzie ładowana! Co się dzieje? Czy czegoś brakuje w odniesieniu do plików statycznych i DEBUG
ustawień?
źródło
Odpowiedzi:
Po wyłączeniu debugowania Django nie będzie już obsługiwał plików statycznych - produkcyjny serwer WWW (Apache lub coś takiego) powinien się tym zająć.
źródło
Jeśli nadal potrzebujesz lokalnego serwera statycznego (np. Do testowania bez debugowania), możesz uruchomić devserver w trybie niepewnym:
źródło
Możesz użyć WhiteNoise do obsługi plików statycznych w produkcji.
Zainstalować:
I zmień plik wsgi.py na:
I możesz iść!
Kredyt na blogu Creative Handlebar .
ALE tak naprawdę nie zaleca się serwowania plików statycznych w ten sposób podczas produkcji. Twój produkcyjny serwer internetowy (jak nginx) powinien się tym zająć.
źródło
wgsi.py
pliku. Dokumentacja, którą dowiązałeś, wydaje się zawierać inne instrukcje dotyczące korzystania z WhiteNoise. Spróbuję innych sposobów i zaktualizuję cię tutaj.manage.py runserver --insecure
nie działało dla mnie. Ten jednak ma.'whitenoise.middleware.WhiteNoiseMiddleware'
do oprogramowania pośredniego. Zobacz informacje o wydaniu dziennika zmianW urls.py dodałem tę linię:
dodaj te dwa adresy URL w urlpatterns:
a zarówno statyczne, jak i multimedialne pliki były dostępne, gdy DEBUG = FAŁSZ.
Mam nadzieję, że to pomoże :)
źródło
url(
zre_path(
Jeśli używasz statycznego widoku udostępniania w fazie projektowania, musisz mieć DEBUG = True:
Dokumenty: serwowanie plików statycznych w programistyce
EDYCJA: Możesz dodać kilka adresów URL tylko w celu przetestowania szablonów 404 i 500, po prostu użyj ogólnego widoku direct_to_template w swoich adresach URL.
źródło
Odpowiedź Johnny'ego jest świetna, ale nadal nie działała dla mnie po prostu poprzez dodanie linii tam opisanych. W oparciu o tę odpowiedź kroki, które faktycznie dla mnie zadziałały, gdzie:
Zainstaluj WhiteNoise zgodnie z opisem:
Utwórz
STATIC_ROOT
zmienną i dodaj WhiteNoise do swojejMIDDLEWARE
zmiennej wsettings.py
:Następnie zmodyfikuj
wsgi.py
plik zgodnie z wyjaśnieniem w odpowiedzi Johnny'ego:Następnie wdróż zmiany na serwerze (za pomocą git lub cokolwiek, którego używasz).
Na koniec uruchom tę
collectstatic
opcjęmanage.py
na swoim serwerze. Spowoduje to skopiowanie wszystkich plików z folderów statycznych doSTATIC_ROOT
określonego wcześniej katalogu:Zobaczysz teraz nowy folder o nazwie
staticfiles
zawierającej takie elementy.Po wykonaniu tych kroków możesz teraz uruchomić swój serwer i będziesz mógł zobaczyć swoje pliki statyczne w trybie produkcyjnym.
Aktualizacja: W przypadku, gdy miał wersję <4 changelog wskazuje, że nie jest już konieczne, aby zadeklarować
WSGI_APPLICATION = 'projectName.wsgi.application'
nasettings.py
pliku.źródło
W rzeczywistości możesz obsługiwać pliki statyczne w produkcyjnej aplikacji Django, bezpiecznie i bez
DEBUG=True
.Zamiast używać samego Django, użyj dj_static w pliku WSGI ( github ):
źródło
Po prostu otwórz projekt urls.py, a następnie znajdź tę instrukcję if.
Możesz zmienić ustawienia. DEBUG na True i zawsze będzie działać. Ale jeśli twój projekt jest czymś poważnym, powinieneś pomyśleć o innych rozwiązaniach wymienionych powyżej.
W django 1.10 możesz napisać:
źródło
Możesz to debugować na wiele różnych sposobów. Oto moje podejście.
localsettings.py:
urls.py:
Przeczytaj dokumenty;)
https://docs.djangoproject.com/en/2.0/howto/static-files/#limiting-use-to-debug-true
źródło
Obsługa argumentów widoku łańcucha dla url () jest przestarzała i zostanie usunięta w Django 1.10
Moje rozwiązanie to tylko niewielka korekta powyższego rozwiązania Conrado.
źródło
Chociaż nie jest to najbezpieczniejsze, ale możesz zmienić kod źródłowy. nawigować do
Python/2.7/site-packages/django/conf/urls/static.py
Następnie edytuj w następujący sposób:
Więc jeśli
settings.debug==False
nie wpłynie to na kod, również po uruchomieniu spróbujpython manage.py runserver --runserver
uruchomić pliki statyczne.UWAGA : Informacje należy wykorzystywać wyłącznie do testowania
źródło
Wprowadziłem następujące zmiany w moim projekcie / urls.py i zadziałało to dla mnie
Dodaj tę linię: z adresu importu django.conf.urls
i dodaj: url (r '^ media / (? P. *) $', obsłuż, {'document_root': settings.MEDIA_ROOT,}), w urlpatterns.
źródło