基本上,我的目标是将用户重定向到呈现index.html
的视图,如果URLConf中没有任何内容与请求的url相匹配。然后,在客户端,我将适当地管理路由或显示404页面。
基本上,问题是,
如何在Django中实现此重定向?我已经尝试过了:
url(r'^(.*)$', views.index),
...其他一些网址
...而且,(.*)
并不奇怪,这意味着所有URL都重定向到index.html,无论它是否与任何其他URL匹配。因此,我应该将其放置在网址列表的最后吗?我有一种应该使用某种中间件的感觉,或者Django可以使用一种本机的方式来解决此问题?
答案 0 :(得分:2)
您可以在URL配置的末尾添加全部捕获,但这会导致某些意外行为(例如,从/my-page
到/my-page/
的重定向(附加斜杠)不再起作用。
更好的方法是编写自定义middleware。您可以查看redirect middleware的灵感,因为它可以处理重定向。
如果您不想重定向API请求,则可以在中间件中添加检查。例如,您无法重定向URL以/api/
开头的请求,或者该请求具有Accept: application/json
头。
另一种选择是使用custom 404 handler来呈现您的索引页。同样,在处理程序中,您拥有request
对象,因此可以不同地对待API请求。