Skip to main content
 首页 » 编程设计

python之Django之如果没有匹配的 url 则重定向到主页

2024年08月14日42zengkefu

基本上,我的目标是在 URLConf 中没有与请求的 url 匹配的情况下将用户重定向到呈现 index.html 的 View 。然后,在客户端,我会适本地管理路由或显示 404 页面。

所以基本上,问题是,

  1. 如何在 Django 中实现这种重定向?我试过这个:

    url(r'^(.*)$', views.index), 
    

    ...其他一些 url

...毫不奇怪,(.*) 意味着所有 url 都被重定向到 index.html,无论它是否与任何其他 URL 匹配。那么我应该把它放在 url 列表的最后吗?我觉得我应该使用某种中间件,或者 Django 有一种 native 方法来解决这个问题?

  1. 这对我的休息应用程序的用户来说是一个令人不快的副作用。每次他们都是一个无效的 URL,他们会得到 HTML(实际上是 home.html 的 HTML)而不是 json 或 404 错误。好吧,index.html 代码并没有什么难看的地方,但它听起来像是个坏主意。那么我是否会分离这个逻辑以便 REST 应用程序的用户得到 404 错误而不是被重定向到 index.html?这主要是关于编码模式,而不是 Django 本身。然而,我也非常感谢对此的任何评论:)

请您参考如下方法:

您可以在 URL 配置的末尾添加 catch all,但这会导致一些意外行为(例如,从 /my-page 重定向到 /my-page/(附加斜杠)不再有效)。

更好的方法是编写自定义 middleware .你可以看看 redirect middleware获取灵感,因为它处理重定向。

如果您不想重定向 API 请求,您可以向您的中间件添加一个检查。例如,您无法重定向 URL 以 /api/ 开头的请求,或者请求具有 Accept: application/json header 。

另一种选择是使用 custom 404 handler呈现您的索引页面。同样,在处理程序中您有 request 对象,因此您可以以不同方式处理 API 请求。