我對這個問題的解決方案是給每個請求,所有的設置和使用中間件即時更新它們,我該怎麼做? 是相當簡單: 這是做這一切
from django.conf import settings
class DumpObject: pass
class Settings(object):
def process_request(self,request):
request.settings = DumpObject()
for setting in dir(settings):
if not setting.startswith('__'):
setattr(request.settings, setting, getattr(settings,setting))
的DumpObject只是有這樣我就可以使用object.property符號中間件,它可能是一本字典,但我想保留一些相似在語法中。 這假設您的設置名稱都不以__開頭,這是一個合理的假設。 所以如果我想重寫一個特定的設置,我不保留一個設置文件,我在這個中間件中做。像這樣:
class Settings(object):
def process_request(self,request):
request.settings = DumpObject()
for setting in dir(settings):
if not setting.startswith('__'):
setattr(request.settings, setting, getattr(settings,setting))
if 'mydomain' in str(request.host): #this is thanks to django-hosts project
request.settings.GOOGLE_ANALYTICS_ID = '89298393-238'
當然,這並不考慮從Django的訪問設置老辦法 的問題。CONF導入設置
settings.GOOGLE_ANALYTICS_ID = 'the value in settings.py'
但它其實並不重要,因爲你可能只是想改變在具有請求對象,可用的情況下設置。
爲什麼不從數據庫生成WSGI文件?這對我來說似乎更爲理智。 – che 2011-05-31 07:17:04
有趣。但我認爲就可擴展性而言,如果整個應用程序與網站無關,那麼我可以配置一個新的服務器,部署我的代碼,並且每個服務器只會爲獲取請求的網站提供頁面。 – 2011-05-31 07:18:24
當你說猴子補丁是你在中間件中修改'django.conf.settings'嗎? – 2011-06-24 15:47:46