2016-11-07 60 views
0

我们最近升级到Django的1.10,我们正在直播的网站上获取此错误:Django的自定义404处理器

内建的:类型错误custom_404()得到了一个意想不到的关键字参数“例外”

的代码如下:

urls.py

urlpatterns = [ ... ] 
handler404 = global_views.custom_404 
handler500 = global_views.custom_500 

global_views.py

def custom_404(request, exception, template_name='404.html'): 
    return page_not_found(request, exception, template_name=template_name) 

def custom_500(request, template_name='500.html'): 
    return server_error(request, template_name=template_name) 

我们已经尝试了这个视图的许多变体,但都导致了这个错误。

怎么回事?

+0

服务器已更新并重新启动数次。问题显示在我们的软件分析工具(NewRelic)上。我认为这不是客户遇到的问题,只是后端发生的事情。只需要知道是什么触发它! – zubhav

+0

我不能重现你的错误,你有没有尝试通过在url.py中添加'url(r'^ test404 /',global_views.custom_404)'来直接测试函数? –

回答

1

server_error视图不应将exception作为参数。它的签名是

defaults.server_error(request, template_name='500.html') 

目前尚不清楚为什么你已经定义了一个custom_404观点,如果你要做的就是调用page_not_found。并呼吁page_not_found在你custom_500视图很奇怪。

+0

作为示例,我粘贴了custom_404视图作为custom_500视图。我的坏,将编辑... 我不想为我的404使用自定义模板,并根据应用程序显示不同的错误模板。 – zubhav

+0

要自定义404模板,只需命名您的模板'404.html'。从你的问题来看,它看起来并不像你需要一个自定义的404处理程序,并且你发布的代码不应该导致这个错误。也许在完整的追溯中有更多有用的信息。 – Alasdair

+0

谢谢你。一个更简单的解决方案是删除处理程序,并让Django选择404.html文件。不过,我有三个不同的应用程序,我想要不同的404页面。将404.html插入到应用程序的模板文件夹中似乎没有办法。它仍然从根模板文件夹呈现404.html文件。有关于此的任何想法? – zubhav