Django内部服务器错误而不是404
我在使用Django 1.6、uwsgi和nginx,应用程序运行得很好,但每当我尝试访问无效的URL时,都会收到500错误和下面的邮件,而不是正常的404错误。
比如我访问 http://my_project_url.com/whatever 或者 http://my_project_url.com/favicon.ico 时,都会出现这个问题。
我检查过这些URL,但没有找到符合这个模式的正则表达式。
以下是邮件中的错误追踪信息:
Traceback (most recent call last):
File "/project/virtenv/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 152, in get_response
response = callback(request, **param_dict)
File "/project/virtenv/local/lib/python2.7/site-packages/django/utils/decorators.py", line 99, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "/project/virtenv/local/lib/python2.7/site-packages/django/views/defaults.py", line 30, in page_not_found
body = template.render(RequestContext(request, {'request_path': request.path}))
File "/project/virtenv/local/lib/python2.7/site-packages/debug_toolbar/panels/templates/panel.py", line 55, in _request_context__init__
context = processor(request)
File "./project/context_processors.py", line 88, in app_delegate
app_name = resolve(request.path).app_name
File "/project/virtenv/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 453, in resolve
return get_resolver(urlconf).resolve(path)
File "/project/virtenv/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 333, in resolve
raise Resolver404({'tried': tried, 'path': new_path})
Resolver404: {u'path': u'favicon.ico', u'tried': [[<RegexURLResolver <module 'custom_
如果我尝试访问一个我在应用中用 raise Http404
抛出的URL,那就没问题,我会看到正常的nginx错误页面。
1 个回答
8
看起来你有一个自定义处理器在尝试解析路径:
File "./project/context_processors.py", line 88, in app_delegate
app_name = resolve(request.path).app_name
引用django的resolve()文档:
如果这个网址无法解析,这个函数会抛出一个Resolver404异常(这是Http404的一个子类)。
我建议你在自定义处理器的代码中处理这个异常,让它看起来像这样:
try:
resolve_result = resolve(request.path)
app_name = resolve_result.app_name
... your code ....
except Resolver404:
pass