【问题标题】:Can a django url contain a fixed path at the beginning?django url 可以在开头包含固定路径吗?
【发布时间】:2021-01-21 15:57:04
【问题描述】:

我有一台运行 django 应用程序的服务器。这个版本很稳定。 出于测试目的,我想在服务器上并行托管同一应用程序的测试版本。两个应用程序具有相似的视图。

通常您可以对子域执行此操作,因此稳定版运行在myserver.de,测试版运行在test.myserver.de。这对我来说是不可能的,我只有一个可用的域 (myserver.de)。

所以我只能使用路径。假设我在myserver.de/[apps urls] 托管稳定版本,在myserver.de/test/[apps urls] 托管测试版本。 为此,我可以编辑测试版本中的所有 url。但这会破坏测试的目的,因为要使测试版本稳定,我必须重新编辑所有 url。

所以我想简单地编辑settings.py 并将ALLOWED_HOSTS = ["mysite.de/test"] 放入测试版本。我在本地使用ALLOWED_HOSTS = ["127.0.0.1:8000/test", "127.0.0.1/test"] 对此进行了测试,但不出所料,这不起作用(我阅读了docs ^^)

有没有办法在 django 服务器上运行两个应用程序,其中一个应用程序的 url 总是以 /test/<rest> 开头而不编辑所有 url? 我可以用 apache2 来代替吗? (我的猜测是否定的,因为 django 会在模板中构建所有链接,所以它必须知道在“内部”/test

【问题讨论】:

  • 我已经编辑了我的答案,请检查它是否是你想要的。

标签: python django server apache2 django-urls


【解决方案1】:

像这样包含网址怎么样:

stable_urls = [
    ...
]
testing_urls = [
    ...
]

urlpatterns = [
    path('', include(stable_urls)),
    path('test/', include(testing_urls)),
]

然后,当您想更改版本时,您可以简单地重命名。
编辑:如果我正确理解了您的问题,那么您可以使用一个空应用程序(django 应用程序)来执行类似的操作,它是 django 项目的主要应用程序。现在在这个应用程序的网址中:

urlpatterns = [
    path('', include('app_version_stable.urls')),
    path('test/', include('app_version_testing.urls')),
]

【讨论】:

  • 我刚刚编辑了我的问题,也许不清楚,这两个应用程序具有相同的网址。我也想并行托管它们。但我喜欢你的想法和清单。我可以简单地注释掉 urlpatterns 中的“错误”url。我不太明白你说的简单重命名是什么意思。
  • 如果他们有相同的网址,你如何测试?你不需要改变观点吗?无论如何,如果需要,您可以在开始时使用不同的路径两次包含相同的列表。重命名是指重命名列表。
  • 我还是不太明白。我想在同一台服务器上同时托管这两个应用程序。但是通过上面的设置,两个应用程序不会要求相同的网址吗?所以我需要通过将它们注释掉来禁用相应版本的相应网址。
  • 你的意思是你有两个版本的同一个应用,你想把它们托管在同一个服务器上?
  • 没错。当然测试版会有一些小的变化,但不会有太大的变化。我不知道,如果我能解释得足够好,我希望我的设置看起来如何。但是你的方法现在几乎对我有用。我不想有一个空的 django 应用程序,而是我将有两个 apache 虚拟主机。然后他们会小心地将请求发送到正确的应用程序,因此当然不会发生冲突
猜你喜欢
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 2018-05-19
  • 2012-04-24
  • 1970-01-01
  • 2018-01-13
相关资源
最近更新 更多