我想让多个django项目生活在同一个根网址:
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项目内容的一些非常重要的问题到目前为止解决了看似讨厌的解决方案。
例如,您永远不能在example.com/project-2或example.com/project-3中的任何模板中引用'/'来返回托管在其中任何一个URL上的django项目的根目录 - - 这将链接到example.com上的home django项目。为了解决这个问题,我创建了一个上下文处理器,它根据自定义的settings.py变量SCRIPT_NAME正确地预先设置项目的根URL:''(例如,对于example.com),'/ project-2'(对于example.com / project-2),或'/ project-3'(例如http://project-3)。除了你需要在get_absolute_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
答案 0 :(得分:3)
您没有展示如何从Apache配置中提供这些项目,这本来是有用的。但是如果你将它们定义为单独的WSGIScriptAlias
指令,那么SCRIPT_NAME
会自动为你传递,而Django会在反转和创建URL时将其考虑在内。
WSGIScriptAlias /project-2 /srv/project2/project2.wsgi
WSGIScriptAlias /project-3 /srv/project3/project3.wsgi
WSGIScriptAlias / /srv/project1/project1.wsgi