2017-01-30 54 views
1

我已經將多個站點定義爲建議的站點框架文檔。Django站點框架可以在同一個實例上使用多個站點嗎?

據我所知,如果我將運行我的應用程序的多個實例,每個實例都有不同的設置文件(不同的SITE_ID),Django總是知道要使用哪個站點。

我試圖做的是運行一個單一的實例,其中多個網站可用,正確的網站應根據網站的當前網址進行選擇。

站點documentation狀態:

的SITE_ID設置指定與該特定的設置文件相關聯的站點對象 的數據庫ID。如果省略設置 ,get_current_site()函數將嘗試通過將域與Request.get_host()方法中的主機名進行比較來獲取當前網站。

於是,我就從我的settings.py刪除SITE_ID並希望Django的將檢查域查找當前站點如上所述,howewer失敗但下列情況除外:

You're using the Django "sites framework" without having set the SITE_ID setting. Create a site in your database and set the SITE_ID setting or pass a request to Site.objects.get_current() to fix this error. 

所以它看起來雖然文檔建議,否則,這個設置是不可忽略的

我明白,使用這樣的網站框架會導致問題,當沒有請求對象可用來找到當前的網站,但這不應該在上下文中是一個問題我的應用程序。

只需檢查應用程序的當前域,是否可以在設置文件中使用站點框架而不對其中的SITE_ID進行硬編碼?

我使用Django版本1.9.9使用Python 3.4.3

回答

1

要「檢查當前域」你需要有一個請求 - 在錯誤消息明確mentionned:

或將請求傳遞給Site.objects.get_current()

否則代碼如何知道「當前域」?

+0

是的,我剛剛意識到,當我發佈的問題,謝謝你! – matyas

+0

@matyas這不回答這個問題 - 這是可能的,如果是的話,你需要做些什麼才能使它工作? – YPCrumble

+0

@YPCrumble是的,這是可能的。如果您的設置中沒有定義site_id,則需要有一個requestcontext才能使Sites框架知道當前網站是什麼。 [get_current_site快捷方式的文檔](http://example.com)https://docs.djangoproject.com/en/1.11/ref/contrib/sites/#django.contrib.sites.shortcuts.get_current_site。這個請求必須傳遞給get_current_site函數get_current_site(request),這會給你當前的網站 – matyas

1

最好的解決方法是簡單地添加Sites framework middleware:在每次請求

'django.contrib.sites.middleware.CurrentSiteMiddleware' 

這會自動將一個請求對象Site.objects.get_current()。

相關問題