Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在raise Http404()上未调用Django handler404_Python_Django_Django Templates_Http Status Code 404 - Fatal编程技术网

Python 在raise Http404()上未调用Django handler404

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错误页面

当我覆盖我的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错误页面(来自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似乎根本没有在my
templates
目录中找到my
404.html/500.html
。将此添加到您的url以检查Django是否找到模板:
url(r'^404$,TemplateView.as_view(template_name=“404.html”),