[英]Django CMS: How to avoid SITE_ID to be set in settings?
我們正在使用Django CMS一段時間,並且需要將我們的網站遷移到使用 Django Sites 框架的多站點實施。 我們想使用CurrentSiteMiddleware來檢測使用了哪個站點(基於子域)。 結果,我們將有一個由中間件設置的request.site.id
,它基於當前用戶對我們網站的請求。
我試圖找到如何在不分叉的情況下使用 Django CMS 的最佳方法,但沒有找到如何做到這一點的好方法。
我們實際需要什么:
TreeNode
具有到Site
model 的 FK,這意味着只能將一個 Page 映射到單個站點。 但是我們需要將 map 一個頁面同時發送到一個或幾個站點。settings.py
文件中設置SITE_ID
的每個實例中工作。SITE_ID
CMS 使用設置文件中的get_current_site()
get_site_id()
() 和 get_current_site() 我試圖模擬這種用法,但想為此找到更好的方法。請幫助我們找到如何繼續使用 Django CMS 的方法,而無需編寫我們自己的類似 CMS 的自行車解決方案。 我們通常喜歡 Django CMS,並希望在我們已有 5 年歷史的社交項目中繼續使用它。
需要你的幫助。
經過幾天的調查,我得出結論,Django CMS 的設計方式是必須在settings.py
文件中設置SITE_ID
屬性。 在許多地方,它無法訪問請求 object,從中我們可以潛在地識別出哪個站點用於發出請求。
我發現的唯一方法是在每個傳入請求時動態更改我自己的中間件中的設置。 這是非常奇怪的做法,但是因為 Django CMS 在我們的網站中被積極使用,我們不能直接替換它——我們需要使用這種 hack 方式,至少現在是這樣。 而 Django 應用程序需要在單線程中運行才能實現這種方法。
Idea 是從django-multisite
項目中借來的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.