Django-如果没有匹配的URL重定向到主页

时间:2018-12-04 11:26:13

标签: python django django-urls urlconf

基本上,我的目标是将用户重定向到呈现index.html的视图,如果URLConf中没有任何内容与请求的url相匹配。然后,在客户端,我将适当地管理路由或显示404页面。

基本上,问题是,

  1. 如何在Django中实现此重定向?我已经尝试过了:

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

    ...其他一些网址

...而且,(.*)并不奇怪,这意味着所有URL都重定向到index.html,无论它是否与任何其他URL匹配。因此,我应该将其放置在网址列表的最后吗?我有一种应该使用某种中间件的感觉,或者Django可以使用一种本机的方式来解决此问题?

  1. 这对于我的其余应用程序的用户来说是一个令人不愉快的副作用。每次它们全部都是无效的URL时,它们将获取HTML(实际上是home.html的HTML),而不是json或404错误。好吧,关于index.html代码没有什么丑陋的,但这听起来像是一个坏主意。因此,我是否应该分开这种逻辑,以便REST应用程序的用户收到404错误,而不是被重定向到index.html?这主要与编码模式有关,而不是Django本身。但是,我也非常感谢对此的任何评论:)

1 个答案:

答案 0 :(得分:2)

您可以在URL配置的末尾添加全部捕获,但这会导致某些意外行为(例如,从/my-page/my-page/的重定向(附加斜杠)不再起作用。

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

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

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