2016-02-02 10 views
7

Zgodnie z documentation powinno to być dość proste: wystarczy zdefiniować handler404. Obecnie robię w moim top urls.py:Jak poprawnie skonfigurować niestandardowy handler404 w django?

urlpatterns = [ 
    ... 
] 

handler404 = 'myapp.views.handle_page_not_found' 

Aplikacja jest zainstalowana. Odpowiedni widok jest po prostu (na razie po prostu chcę, aby przekierować do strony głównej w przypadku 404):

def handle_page_not_found(request): 
    return redirect('homepage') 

Ale to nie ma znaczenia: średnia (debug) 404 strona jest pokazana.

Dokumentacja jest nieco dwuznaczne:

  • gdzie powinien handler404 być zdefiniowane? Dokumentacja mówi w URLconf, ale gdzie dokładnie? Mam kilka aplikacji, każda z inną wersją urls.py. Czy mogę umieścić to w którymś z nich? W górę URLconf? Czemu? Gdzie jest to udokumentowane?
  • co zostanie przechwycone przez tego przewodnika? Czy to złapie django.http.Http404, django.http.HttpResponseNotFound, django.http.HttpResponse (z status=404)?
+1

Co to jest "DEBUG" w ustawieniach? Jeśli jest to "Prawda", czy możesz zmienić go na "Fałsz" i zobaczyć? –

+0

@ShangWang: dzięki! Rzeczywiście, ustawienie go na "Fałsz" rozwiązuje problem. To nie jest udokumentowane, afaik. – dangonfast

+0

@delavnog - Znajduje się w sekcji [raportowanie błędów] (https://docs.djangoproject.com/en/1.9/howto/error-reporting/#error-reporting) - "Kiedy DEBUG jest fałszywy, ..." – Sayse

Odpowiedz

5

Jak już omówiliśmy, twoja konfiguracja jest poprawna, ale w settings.py powinieneś wykonać DEBUG=False. Jest to raczej funkcja produkcyjna i nie będzie działała w środowisku programistycznym (chyba że masz w maszynie programistycznej numer DEBUG=False).

+2

Zmieniam moje na 'Fałsz' w trybie programowania i wciąż wyświetlają się domyślne strony błędów django. – Rexford

Powiązane problemy