Django未能加载400.html

问题描述 投票:0回答:1

我为我的Django项目定义了错误400和404的自定义模板。当我尝试访问我的网站的生产版本时,错误404模板已正确加载丢失的页面。但是,如果我向Apache / Django服务器发送错误请求(例如http://mysite.example.com/%),则不会加载错误400的模板,而是呈现常规Apache错误页面:

Bad Request

Your browser sent a request that this server could not understand.
Apache/2.4.18 (Ubuntu) Server at mysite.example.com Port 80

apache是​​否将此请求转发给Django,或者我是否需要在我的Django项目中定义handler400以使其工作(尽管我没有为404.html执行此操作)?

python django python-3.x apache
1个回答
1
投票

这里的关键点是你的apache充当你的usgi服务器的代理。它将所有有效请求转发给usgi,就apache而言,对不存在的请求的请求是有效请求,并且需要转发到django路由器 - 这将发现url映射不存在并引发404错误。此错误由django内部完成,导致显示django 404页面。

一些请求,尤其是django rest框架,当序列化程序无法验证传入的json请求时,会在内部生成400个响应。这些也将导致显示django 400页面。

但是,如果请求本身格式错误,它将永远不会转发到usgi服务器,而django将永远不会看到它。它将由apache内部处理,因此显示了apache 400 html的原因。

最简单的解决方案是用相应的django替换所有apache错误页面(如果这些是模板,渲染它们并保存html)

© www.soinside.com 2019 - 2024. All rights reserved.