【问题标题】:Django wrong url pattern for subpath子路径的 Django 错误 url 模式
【发布时间】:2018-10-06 20:37:34
【问题描述】:

我真的不知道如何解释我的问题。 我正在尝试做的是以下内容。

我的管理员将我的 Django 服务器地址 192.168.2.1:8001 链接到一个网址:devel.genesilico.pl/modomics,以公开该网站,否则该网站仅在我们的本地网络上可见。

如果我访问该地址,我会看到没有静态文件的网站主页,如果我尝试访问另一个页面,地址会更改为:

devel.genesilico.pl/modifications

所以 modomics 前缀路径被删除,它找不到页面。

我认为更改我的 URLs.py 在它们前面添加 modomics 可以解决这个问题,但没有。此时,Django 的 DEBUG 向我展示了这一点(附照片)。在这种情况下,前缀“modomics”也被删除了。

我不知道该怎么办。我不知道这个问题是由 Django 引起的,还是由我的管理员给我的网址设置引起的。

请注意,我仅针对应用修改进行测试。

这里是我的主要 urls.py:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include('core.urls')),
    url(r'^', include('modifications.urls')),
    url(r'^', include('sequences.urls')),
    url(r'^', include('pathways.urls')),]

这里是应用修改的 urls.py:

urlpatterns = [
    url(r'^modomics/modifications$', views.modlist, name='modlist'),
    url(r'^modomics/modifications/(?P<mod_name>.+)/$', views.moddescription, name='moddescription'),
]

【问题讨论】:

  • 显示你的 urls.py
  • 请注意,您不应在公共网站上使用 DEBUG=True 或 Django 运行服务器。这是不安全的。
  • 谢谢@Alasdair,我知道。事实上,这是一个开发者版本的网络服务器。
  • 任何人都可以使用您问题中的 URL 访问您的开发者网站。正如我所说,你不应该这样做,这是不安全的。
  • @Alasdair 你跑题了。

标签: django url django-urls url-scheme


【解决方案1】:

您似乎需要将应用程序配置为在子文件夹上运行。

发生的情况是,reverse 函数正在生成指向根目录 / 而不是 /modomics 的相对 URL,因为您的服务器不知道它的托管方式不同。

有两种方法可以解决这个问题:

  1. 在settings.py中,你可以设置FORCE_SCRIPT_NAME = '/modomics'来获取正确生成的URL,或者

  2. 让您的管理员将/modomics 作为标头X-Script-Name 的值传递并在wsgi.py - see this related answer 中处理它

第一个解决方案的缺点是,您需要确保您的网站配置为使用 one of the settings file patterns for deployment 在开发和生产中以不同方式运行,并且如果子文件夹发生更改,您需要与您的管理员协调。

【讨论】:

  • 多一点:您可能需要相应地调整您的 urls.py(假设 /modomics 被添加到每个 URL 的开头)。并在面向公众的站点中禁用 DEBUG 以确保安全
  • 非常感谢,这就是我要找的。我有一个类似的 Web 服务器,它以相同的方式部署,但它可以工作。可能管理员忘了做你写的第二个答案。
猜你喜欢
  • 2020-09-11
  • 2016-11-22
  • 2018-11-16
  • 1970-01-01
  • 2018-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多