Django - get_object_or_404返回500而不是404

时间:2016-06-02 18:38:59

标签: django django-views django-errors

我试图在get_object_or_404中测试view方法。所以我设置DEBUG=False并设置ALLOWED_HOSTS=['*']

现在,当我转到http://127.0.0.1:8000/profile/correctusername/时,它会返回正确的个人资料。问题是如果我尝试编写不正确的username,它会返回500而不是404 - 根据函数的名称,我认为它应该返回404。< / p>

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

为什么会如此以及如何解决?

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,Milano Slesarik的评论帮助我找到了解决方案。事实证明,我最近分配了一个自定义404处理程序,但没有正确执行。

这是我做得对的: 将以下行添加到urls.py.无需从django.conf.urls import handler404&#34;添加&#34;     handler404 = views.error404

这是我做错了什么。在我的views.py中我添加了这个函数:     def error404(请求):         返回HttpResponseNotFound(&#39;未找到自定义404&#39;)

但是我忘了在views.py中导入HttpResponseNotFound:     来自django.http import HttpResponse,HttpResponseNotFound

所以它提出了一个例外。但由于我只是设置了DEBUG = False,我无法看到错误。我刚刚看到500响应代码。

希望能帮助别人!

在urls.py中包含以下行: handler404 =&#39; views.error404&#39;

答案 1 :(得分:0)

如果项目有多个带有自己的urls.py的应用程序,则应将handler404 = 'app_name.views.my_handle404'添加到根URL conf(默认情况下位于项目目录中)