Python 在raise Http404()上未调用Django handler404
当我覆盖我的URL.py中的handler404和handler500时,如下所示:Python 在raise Http404()上未调用Django handler404,python,django,django-templates,http-status-code-404,Python,Django,Django Templates,Http Status Code 404,当我覆盖我的URL.py中的handler404和handler500时,如下所示: from myapp.views import not_found_view handler404 = not_found_view handler500 = not_found_view 在我的中间件中调用raisehttp404(),我看到了我的404页面 当我在我的中间件中从我的url.py和raise Http404()中删除handler404和handler500时,我会看到默认的500错误页面
from myapp.views import not_found_view
handler404 = not_found_view
handler500 = not_found_view
在我的中间件中调用raisehttp404()
,我看到了我的404页面
当我在我的中间件中从我的url.py
和raise Http404()
中删除handler404
和handler500
时,我会看到默认的500错误页面(来自Django套装)-因此,我正试图设置一个自定义404模板用于raise Http404()
现在我的问题是:当我移除handler500并且只设置handler404时,我还看到了一个HTTP 500页面
为什么在我提升Http404()时调用我的handler500
我在多个应用程序中有多个模板目录,我尝试在包含设置的主应用程序和另一个“普通”应用程序中放置一个404.html
,但不起作用
我还将DEBUG
设置为False
希望有人能回答我的问题 如果只想替换Django的模板,就不必编写自己的处理程序。Django使用
404.html
和500.html
文件作为模板,您可以将它们替换为将同名文件放入settings.TEMPLATE\u DIRS
中列出的目录
在您的示例中,这意味着您可以创建myapp/templates/404.html
和myapp/templates/500.html
文件
请注意,您必须将DEBUG
设置为False
才能使用这些模板
检查mor详细信息。另一个解决方案是替换(猴子补丁)Django的页面
from django.views import defaults
from myapp.views import not_found_view
defaults.page_not_found = not_found_view
猴子补丁是一种不好的做法,如果Django更新内部API,它可能会停止工作,但在某些情况下仍然可能有用。例如,如果其他方法因某种原因不起作用。我遇到了类似的情况。我的自定义handler404被调用,但我的浏览器响应显示错误500 检查后,我发现模板中有语法错误。因此,500强正是由这一点引起的。我修复了模板,结果符合要求 catch 22是默认情况下,template debug==debug,因此如果设置debug=False,那么模板调试也将为False;您将看到没有模板错误跟踪的500错误 因此,在返回render()之前,在handler404视图中放置一条print()语句。如果您在django控制台中看到输出,您将知道错误在模板中
TEMPLATES = [
{
'OPTIONS': {
'debug': True,
}
},
你也可以在你的settings.py(django 1.8+)中尝试这个,但这似乎对我不起作用,而且我在修复模板后也没有完成
TEMPLATES = [
{
'OPTIONS': {
'debug': True,
}
},
404页面未找到视图需要一个“exception”参数:
def handler404(request, exception):
return render(request, 'customer/home_page/404.html', status=404)
这正是我所做的,我的模板目录包含:“myapp/templates”,但我一直收到500个错误页面。您的
404.html
文件似乎有问题,您收到500个错误,因为Django崩溃。将日志记录设置为文件并检查出现错误的原因。检查此项以获取帮助:或者,如果您正在使用Django的开发服务器,您可以登录到控制台。多年来,我学到了应该始终检查日志,所以我在问问题之前就这样做了:)我的日志上写着:raise Http404
。。奇怪的是,Django似乎根本没有在mytemplates
目录中找到my404.html/500.html
。将此添加到您的url以检查Django是否找到模板:url(r'^404$,TemplateView.as_view(template_name=“404.html”),