【问题标题】:Django: Site-Wide URL PrefixDjango:站点范围的 URL 前缀
【发布时间】:2011-02-23 07:15:25
【问题描述】:

我已经建立了一个 Django 站点,当它运行时,它会在根目录下运行。现在它在 IP 地址上运行良好。出于测试目的,客户端已将代理 url 指向它,但该 url 中包含 /folder/path,因此所有 URL 模式都不匹配。我把(/文件夹/路径)?进入所有 url 模式,因此它们现在会响应,但是所有链接都已损坏,因为我使用的是 {% url %} 标记,虽然 url 模式将匹配可选路径,但它们不会将其包含在该标记中。

显然,在测试完成之前,我可以将 /folder/path 硬编码到我的所有 url(嗯,包含在所有 url 中),但是有更好的方法吗?

【问题讨论】:

    标签: django django-urls


    【解决方案1】:

    为此,我在 settings.py 中使用 URL_PREFIX 并将其添加到 urls.py 中的每个包含中。我还将它添加到 MEDIA_URL 的开头,以使所有图像/css/js 链接都能正常工作。但我也想听听一些更棘手的解决方案?

    【讨论】:

      【解决方案2】:

      在部署应用程序时,您可以通过在 Apache 配置中正确设置 WSGIScriptAlias 来管理这一点(假设您正在使用 mod_wsgi,您应该这样做)。这被传递给 Django,然后它会自动为所有 URL 反向查找添加正确值的前缀。您不需要对前缀进行任何手动处理。

      【讨论】:

      • 澄清一下,换句话说,确保后端使用 WSGIScriptAlias 的 URL 挂载点与任何前端代理挂载的 URL 相匹配。只要它们相同,那么就前缀而言应该都可以正常工作。
      • @Daniel nginx + uwsgi 部署怎么样?
      • @Daniel Roseman 我正在 xampp 本地部署我的 django 应用程序在 apache 中,我有这个 WSGIScriptAlias /dj/ "c:/xampp/htdocs/commons/mod.wsgi" 但你似乎必须在我已经开发的应用程序中的 URL 前加上 /dj/ .如果我理解正确,dj 应该会自动添加前缀,但事实并非如此。我哪里错了
      • @Daniel Roseman 我也对这种方法有疑问。有些人获得了正确的 URL(带有前缀),而其他人则没有。关于为什么会发生这种情况的任何想法?
      • 明确地说,这篇文章已经过时了。您应该使用 Gunicorn 来部署您的项目。
      【解决方案3】:

      如果 WSGIScriptAlias 不起作用或者由于某种原因您无法设置它,请记住 urlconf 中的 include() 函数将前缀添加到所有 URL。您可以创建一个包含当前根 urlconf 的 urlconf 并将其挂载在前缀处,然后将 settings.py 文件指向该 urlconf。

      免责声明:我自己没有尝试过,但应该可以。

      【讨论】:

        猜你喜欢
        • 2013-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多