Django的500.html不起作用

时间:2010-09-07 09:55:49

标签: django

我想用自己的页面来解决500个错误。所以我在我的模板根目录中放了一个500.html。但是当发生错误时,将显示默认的apache 500页面。 我对404.html做了同样的事情,这个工作正常。

有谁知道问题可能是什么?

5 个答案:

答案 0 :(得分:2)

  1. 在Django获得一个查看之前,检查一下Dj肯定是被Django抛出而不是实际上是由Apache抛出的。根据Apache错误日志,哪里是500的根本原因?

  2. 检查该500页的文件权限(不太可能出错,但仍然存在)

  3. DPaste您的500.html页面,我们可以看到它是否比直接HTML更复杂

答案 1 :(得分:1)

默认情况下,django会从django.conf.urls.defaults import *添加到您的urls.py.
静态分析工具可能会抱怨它,但如果你改变它只导入你真正使用的名称(例如模式和包含),你最终会破坏Django用来处理错误的机制 - 例如它不会显示500个错误。

答案 2 :(得分:1)

在django.views.defaults中更改def server_error的返回值:

从:

return http.HttpResponseServerError(t.render(Context({})))

为:

return http.HttpResponseServerError(t.render(RequestContext(request, {'request_path': request.path})))

答案 3 :(得分:1)

我今天遇到了同样的问题,问题出现在我的500.html文件中:我包含了一个德语变音符号(“ö”),这个导致apache在渲染我的500错误消息时抛出了它自己的错误信息。 您可以通过查看您的apache错误日志来识别它,在我的情况下,它显示了UnicodeDecodeError: 'utf8' codec can't decode byte 0xf6 in position 583: invalid start byte

事实上,stevejalim的答案有助于弄清楚这一点。

答案 4 :(得分:0)

我的问题是我正在尝试扩展另一个包含大量上下文和配置变量的模板,因此,错误模板本身导致了服务器错误。 Steve Jalim和OBu的答案有所帮助。