2011-06-22 149 views
2

我想有住在同根URL像这样多个Django项目:多个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项目的根网址:'(example.com的),“/项目-2”(的example.com/project-2)或'/ project-3'(例如,http://project-3)。除了你需要在get_absolute_url函数中做同样的事情之外,这一切都很好。在我知道之前,我只是将一堆非常可重用的代码(除了我自己以外的人)转换为不可重用的代码。

有没有办法来完成相同的效果,而不必在前面加上了SCRIPT_NAME绝对URL?也许巧妙的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 

回答

3

你没有表现如何从你的Apache配置服务这些项目,这将是有用的。但是,如果你将它们定义为独立的WSGIScriptAlias指令,然后SCRIPT_NAME自动穿过你,和倒车和创建URL时Django的需要考虑它。

WSGIScriptAlias /project-2 /srv/project2/project2.wsgi 
WSGIScriptAlias /project-3 /srv/project3/project3.wsgi 
WSGIScriptAlias//srv/project1/project1.wsgi 
+0

见上文编辑。我的apache设置很像你描述的(+ RewriteRules,如果这有所作为)。在颠倒和创建URL时,Django如何自动考虑这一点?这并没有为我工作开箱... – dino

+0

回调,get_absolute_url和使用url模板标签不工作的开箱。问题只在于硬编码的URL。谢谢你的帮助! – dino

+0

丹尼尔是正确的,它应该工作。也就是说,你需要使用合适的模板标签和其他Django函数来构建URL。在模板中,您应该使用'网址模板标记。请参阅'https://docs.djangoproject.com/en/1.3/ref/templates/builtins/#url'。你实际上是使用该模板标签,还是当你不应该使用URL硬连线模板? –