Python Django-如果没有匹配的url,则重定向到主页
基本上,我的目标是将用户重定向到呈现Python Django-如果没有匹配的url,则重定向到主页,python,django,django-urls,urlconf,Python,Django,Django Urls,Urlconf,基本上,我的目标是将用户重定向到呈现index.html的视图,如果URLConf中没有与请求的url匹配的内容。然后,在客户端,我将根据需要管理路由或显示404页面 所以基本上,问题是 如何在Django中实现这种重定向?我试过这个: url(r'^(.*)$', views.index), …其他一些URL …毫不奇怪,(.*)意味着所有URL都被重定向到index.html,不管它是否与任何其他URL匹配。所以我应该把它放在url列表的最后吗?我觉得我应该使用某种中间件,或者Django
index.html
的视图,如果URLConf中没有与请求的url匹配的内容。然后,在客户端,我将根据需要管理路由或显示404页面
所以基本上,问题是
url(r'^(.*)$', views.index),
…其他一些URL(.*)
意味着所有URL都被重定向到index.html,不管它是否与任何其他URL匹配。所以我应该把它放在url列表的最后吗?我觉得我应该使用某种中间件,或者Django有一种本地的方法来解决这个问题
您可以在URL配置的末尾添加catch all,但它会导致一些意外行为(例如,从
/my page
重定向到/my page/
(追加斜杠)不再有效)
一个更好的方法是编写一个自定义的。您可以从中寻找灵感,因为它处理重定向
如果不想重定向API请求,可以向中间件添加检查。例如,如果URL以/api/
开头,或者请求具有Accept:application/json
头,则无法重定向请求
另一个选项是使用呈现索引页的。同样,在处理程序中,您有
请求
对象,因此您可以以不同的方式处理API请求。如果我们使用handler404
重定向,请查看将来在此登录的用户,它可能会停止重定向i18n URL。请您确认检查这是否是api调用的适当方法是request.content\u type=='application/json
,这实际上取决于您的api。GET请求没有正文,因此它们没有内容类型头。您可能还需要考虑API客户端是否在实践中发送正确的头文件。