2016-06-02 4 views
0

Я пытался проверить метод get_object_or_404 в моем view. Поэтому я установил DEBUG=False и установил ALLOWED_HOSTS=['*'].Django - get_object_or_404 возвращает 500 вместо 404

Теперь, когда я перехожу на http://127.0.0.1:8000/profile/correctusername/, он возвращает правильный профиль. Проблема в том, что если я попытаюсь написать неверный username, он вернет 500 вместо 404 - в соответствии с названием functio я полагаю, что он должен вернуть 404.

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

Почему это так и как это исправить?

+0

я оставил бы DEBUG установлен так, что, как вы сможете увидеть более подробное сообщение об ошибке, что пошло не так. Вы по-прежнему сможете узнать, вернётся ли объект назад или ошибка 404. – denvaar

+0

Я проверил его, и он действительно возвращает 404, поэтому я не знаю, почему без режима DEBUG он возвращает 500. Может быть, потому что он не может найти 404 html? –

+0

Вот почему. – denvaar

ответ

1

Я столкнулся с той же проблемой, и комментарий Милана Слесарика помог мне разобраться в решении. Оказывается, я недавно назначил пользовательский обработчик 404, но не сделал это правильно.

Вот что я сделал правильно: добавить следующую строку в urls.py. Не нужно добавлять «из django.conf.urls import handler404» handler404 = views.error404

Вот что я сделал не так. В моем views.py я добавил эту функцию: Защиту error404 (запрос): возвращения HttpResponseNotFound ('обычай 404 не найден')

Но я забыл импортировать HttpResponseNotFound в views.py: от импорта django.http HttpResponse , HttpResponseNotFound

Таким образом, было создано исключение. Но поскольку я просто установил DEBUG = False, я не мог видеть ошибку. Я только что увидел код ответа 500.

Надеюсь, что кто-то поможет!

со следующей строкой в ​​urls.py: handler404 = «views.error404»