Django:无法覆盖handler404

时间:2016-11-17 18:31:14

标签: python django

部分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

0 个答案:

没有答案