【发布时间】:2011-06-22 10:33:36
【问题描述】:
我希望多个 django 项目位于同一个根 url,如下所示:
example.com/ # controlled by home django project
example.com/project-2 # controlled by a separate django project
example.com/project-3 # controlled by yet another django project
我已经将 LOGIN_REDIRECT_URL 等重新定义为 suggested by this excellent answer,但我发现了另一个障碍。我实际上在 example.com/project-2 和 example.com/project-3 的项目中使用相同的应用程序,这会导致链接到 django 项目内部的内容时出现一些不小的问题用看似 hacky 的解决方案解决。
例如,您永远不能在 example.com/project-2 或 example.com/project-3 的任何模板中引用“/”来返回托管在这些 URL 中的任何一个的 django 项目的根目录 - -- 这将链接到 example.com 上的 home django 项目。为了解决这个问题,我制作了一个上下文处理器,它根据自定义 settings.py 变量 SCRIPT_NAME: '' (for example.com), '/project-2' (for example.com /project-2) 或“/project-3”(例如.com/project-3)。这一切都很好,只是您需要在 get_absolute_url 函数中做同样的事情。在不知不觉中,我刚刚将一堆非常可重用的代码(由我以外的人)变成了根本不可重用的代码。
有没有一种无需在绝对 URL 前面加上 SCRIPT_NAME 的方法来实现相同的效果?也许 apache 或 mod_wsgi 配置的一些巧妙之处?我很茫然,希望有人能帮忙...
编辑:
example.com 的 apache 配置如下所示:
# redirect un-'/'-terminated urls to the '/'-terminated root urls
RewriteEngine On
RewriteRule /project-2$ /project-2/ [R=302,L]
RewriteRule /project-3$ /project-3/ [R=302,L]
# mod wsgi setup
WSGIScriptAlias /project-2 /srv/project2/project-2.wsgi
WSGIScriptAlias /project-3 /srv/project3/project-3.wsgi
WSGIScriptAlias / /srv/project1/project-1.wsgi
【问题讨论】: