2016-06-02 15 views
0

Ich habe versucht, get_object_or_404 Methode in meinem view zu testen. Also setze ich DEBUG=False und setze ALLOWED_HOSTS=['*'].Django - get_object_or_404 gibt 500 statt 404 zurück

Jetzt, wenn ich zu http://127.0.0.1:8000/profile/correctusername/ gehe, gibt es ein korrektes Profil zurück. Das Problem ist, dass, wenn ich versuche, falsch username zu schreiben, es 500 anstelle von 404 zurückgibt - entsprechend dem Namen der Funktion nehme ich an, dass es 404 zurückgeben sollte.

def get_user_profile(request, username): 
    # user = User.objects.get(username=username) 
    user = get_object_or_404(User, username=username) 

    jobs = user.jobs.all() 
    table = MyJobsTable(jobs) 

    context = { 
     'my_jobs': table, 
     "user_": user 
    } 
    return render(request, 'auth/profiles/my-profile.html', context=context) 

enter image description here

Warum ist das so und wie man es beheben?

+0

würde ich verlassen DEBUG auf true gesetzt, so erhalten Sie eine ausführlichere Fehler sehen Nachricht von dem, was schief gelaufen können. Sie können immer noch sehen, ob Sie ein Objekt zurückbekommen oder einen 404-Fehler. – denvaar

+0

Ich habe es überprüft und es gibt wirklich 404 zurück, also weiß ich nicht, warum ohne DEBUG-Modus 500 zurückgibt. Vielleicht weil 404 html nicht finden kann? –

+0

Das könnte der Grund sein. – denvaar

Antwort

1

Ich stieß auf das gleiche Problem und Milano Slesariks Kommentar half mir, die Lösung herauszufinden. Es stellt sich heraus, dass ich vor kurzem einen benutzerdefinierten 404-Handler zugewiesen, aber nicht richtig gemacht habe.

Folgendes habe ich richtig gemacht: füge folgende Zeile zu urls.py hinzu. Keine Notwendigkeit hinzuzufügen "from django.conf.urls import handler404" handler404 = ansichten.error404

Hier ist, was ich falsch gemacht habe. In meinem views.py habe ich diese Funktion: def error404 (Anfrage): return HttpResponseNotFound ('custom 404 not found')

Aber ich vergaß HttpResponseNotFound in views.py zu importieren: von django.http import Httpresponse , HttpResponseNotFound

So war es eine Ausnahme auslösen. Aber da ich DEBUG = False gesetzt habe, konnte ich den Fehler nicht sehen. Ich habe gerade den 500 Antwortcode gesehen.

Hoffe, dass jemand hilft!

mit der folgenden Zeile in urls.py: ‚views.error404‘ handler404 =