2011-06-22 242 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硬連線模板? –