2015-02-10 30 views
6

Witam wszystkich Mam problem rozwiązać ten problem: Gdybym włączyć DEBUG na False, nie mogę uruchomić manage.py runserver:Django nie można znaleźć staticfiles z Debug = False i Allowed_Hosts

CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False 

następnie, powiedzmy coś dodać do ALLOWED_HOSTS:

ALLOWED_HOSTS = ['*'] 
or 
ALLOWED_HOSTS = ['localhost'] 
or 
ALLOWED_HOSTS = ['127.0.0.1', 'localhost'] 

teraz mogę zrobić'manage.py runserver' ale staticfiles nie działają. Dziwne.

Jeśli ustawię DEBUG na True, to działa z ALLOWED_HOSTS ustawiony na nic, na localhost lub na *. Myślę więc, że problem dotyczy DEBUG. Nie rozumiem tego.

Odpowiedz

10

W trybie DEBUG serwer projektowania Django obsługuje wyświetlanie plików statycznych. Jednak nie jest to najlepsze w przypadku produkcji, ponieważ jest znacznie bardziej nieefektywne niż prawdziwy serwer. Zobacz here.

serwowania plików

Oprócz tych kroków konfiguracyjnych, musisz również, aby rzeczywiście służyć plików statycznych.

Podczas programowania, jeśli użyjesz django.contrib.staticfiles, zostanie to wykonane automatycznie przez runserver, gdy DEBUG ma wartość True (zobacz django.contrib.staticfiles.views.serve()).

Metoda ta jest rażąco nieefektywna i prawdopodobnie nie jest bezpieczna, dlatego nie nadaje się do produkcji.

Zobacz Wczytanie plików statycznych, aby uzyskać prawidłowe strategie wyświetlania plików statycznych w środowiskach produkcyjnych.

Zapoznaj się z here, aby dowiedzieć się, jak wyświetlać pliki statyczne w produkcji.

EDYCJA: Dodanie następujących odpowiedzi, aby odpowiedzieć na pytanie @alejoss dotyczące wyświetlania stron błędów z DEBUG = Prawda.

mi coś takiego do mojego korzenia urls.py pliku dodanej:

if settings.DEBUG: 
    urlpatterns += patterns(
     '', 
     url(r'^400/$', TemplateView.as_view(template_name='400.html')), 
     url(r'^403/$', TemplateView.as_view(template_name='403.html')), 
     url(r'^404/$', 'django.views.defaults.page_not_found'), 
     url(r'^500/$', 'django.views.defaults.server_error'), 
    ) 

Może trzeba zmienić trochę (tzn, strony 400 i 403 konieczne może być edytowany, jeśli nazwy szablonu są różne) . Zasadniczo pozwala to odwiedzić stronę http://localhost/400, aby wyświetlić stronę błędu 400, http://localhost/403, aby wyświetlić stronę błędu i tak dalej.

+0

Ok, tylko biegł ten sam problem. Jak mam przetestować mój 404.html/500.html? Jeśli debugowanie jest fałszywe, pojawia się błąd. Jeśli debugowanie jest prawdą, nie zobaczę stron z błędami. :( – alejoss

+1

Hey @alejoss, redagowałem moją oryginalną odpowiedź, więc mogłeś zobaczyć to z formatowaniem. Daj mi znać, jeśli masz z tym jakiś problem – Alex

3

Jeśli trzeba jeszcze serwera statycznego lokalnie (na przykład do testowania bez debugowania) można uruchomić w trybie niezabezpieczonym devserver:

manage.py runserver --insecure 
+0

Oryginalna odpowiedź: http://stackoverflow.com/questions/5836674/why- do-debug-false-setting-make-my-django-static-files-access-fail – haifzhan