部分urls.py(用于测试):
old_handler404 = handler404
def custom_page_not_found(request, *args, **kwargs):
from django.http import HttpResponseNotFound
if request.path.startswith('/myapp/api'):
try:
return HttpResponseNotFound( json.dumps( {'info': 'page not found'} ),
content_type='application/json')
except Exception as e:
print 'Exception:', e
#return HttpResponseNotFound('Page Not found', content_type='text/html; charset=utf-8')
try:
res = old_handler404( request, *args, **kwargs )
except Exception as e:
print 'Exception:', e
return res
handler404 = custom_page_not_found
尝试覆盖现有的404handler,对于rest apis(以/myapp/api
开头的网址),如果网址不匹配则返回404和JSON中的错误消息,对于剩余的,返回404和现有的not found
页面网址不匹配。
对于/myapp/api
,它运行正常。但对于其余的,它返回500
而不是预期的404
。没有显示异常信息。
欢迎任何评论。感谢
更新
异常:'str'对象不可调用
更新
以下代码怎么样?任何副作用?
事实上,在我的django应用myapp
中,有几个子应用。一些子应用程序由其他人完成,api
子应用程序由我完成。我只是不想改变/触摸别人的逻辑和代码。以下代码怎么样?欢迎任何欢迎。感谢。
from django.views.defaults import page_not_found as old_page_not_found
#old_handler404 = django.views.defaults.page_not_found
def custom_page_not_found(request, *args, **kwargs):
from django.http import HttpResponseNotFound
if request.path.startswith('/myapp/api'):
try:
return HttpResponseNotFound( json.dumps( {'info': 'page not found'} ),
content_type='application/json')
except Exception as e:
print 'Exception:', e
#return HttpResponseNotFound('Page Not found', content_type='text/html; charset=utf-8')
try:
res = old_page_not_found( request, *args, **kwargs)
except Exception as e:
print 'Exception:', e
return res