【问题标题】:Django: Temporarily redirect all URLs to one viewDjango:临时将所有 URL 重定向到一个视图
【发布时间】:2017-10-21 11:42:13
【问题描述】:

我正在构建站点,并认为拥有某种维护页面会很好,我可以在需要时重定向用户。

如何开始将所有请求重定向到一个特定视图?我正在使用Constance 在我的管理视图中进行维护开关(只是一个布尔值)。然后它的价值在整个项目中都是可用的。

我已经准备了另一个urlpatterns 列表,但不知道如何动态更改它们以便重定向工作。

maintenance_urlpatterns = [
    url(r'^$', views.maintenance, name='maintenance'),
]

这是来自应用程序的urls.py 文件,而不是我将独自留下的项目。

我也想过修改base.html模板并以这种方式渲染“维护页面”,但我认为这是一个非常糟糕的解决方案。

编辑:澄清。我的主要问题不是如何编写将捕获所有流量的 urlpattern,而是如何动态编辑这些以响应 Constance 配置更改。所以我可以在管理员中切换它。

【问题讨论】:

标签: python django redirect


【解决方案1】:

您问题中的正则表达式仅匹配/(您网站的根目录)。如果您想捕获所有内容,请仅使用^。每个 URL 都有一个开头,所以 ^ 总是匹配的。

url(r'^', views.maintenance, name='maintenance')

当然,这取决于您的正常 urlpatterns 是否以某种方式被禁用。听起来您可能已经掌握了这些内容。

【讨论】:

  • 好吧,不幸的是我没有 :-) 我只准备了这些其他 urlpatterns 但不知道在我的管理中切换维护后如何更改它们..
  • @Filip 我认为您最好使用中间件。创建一个布尔设置MAINTENANCE_MODE 并将您的中间件放在列表的首位。如果MAINTENANCE_MODE 为真,则从中间件返回您的静态响应。 (您也可以对 URL 进行一些有条件的摆弄,但 IMO 中间件要干净得多)。另一种选择是在比您的 WSGI 服务器更高的级别执行静态交付,例如 Nginx。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-01
  • 2012-03-10
  • 1970-01-01
  • 1970-01-01
  • 2018-07-18
  • 1970-01-01
相关资源
最近更新 更多