我想將一些(特定於應用程序的)設置暴露給管理界面,這樣用戶可以輕松地更改它們,也不必重新啟動Django。
我該怎麽辦呢?
我在 http://djangopackages.com/grids/g/live-setting/上查看了應用程序(btw django-constance是最吸引人的)但實際上所有這些應用程序正在做的是將值存儲在數據庫中,提供用於更改它們的Web界面和緩存。 Django中已經內置了前兩個功能嗎?
我看到的最大缺點是沒有一個應用程序是這些設置的舊位置(settings.py)的替代品,並且要求我遷移到他們的表示法,並且經常添加另一個上下文處理器以在模板中訪問它們。
我不能這樣做嗎?
- Create a model for my settings (this gives me the various types and validation)
- Instantiate one such object to hold my settings (this allows the users to edit them in the admin interface) - I could dump defaults as fixtures like for other models
- Wrap settings.py so it makes a database query for my settings - http://www.loose-bits.com/2011/04/extending-django-settings-with-derived.html
從我目前的天真觀點來看,我看到的唯一缺點是:
- 添加或更改可用設置需要架構遷移(南)。 - 我可以忍受。
- 我有一個可能有多個實例的模型,但實際上只需要一個單例。 - 在某些時候,這實際上可能是一個有用的功能。
- 性能/緩存:查看 http://code.djangoproject.com/svn/django/trunk/django/conf/我必須在設置包裝器和/或模型中加入一點聰明,以便模型更改清除或更新緩存值。 - 似乎不是火箭科學。
- 在另一個項目中做同樣的事情需要再次進行類似的努力。 - 我認為settings.py中的單個字典常量,包含查找的模型名稱和字段名稱都是不同的。
這不是兩個世界中最好的 - 運行時管理(具有所有特權),數據庫後端,緩存,以及我的所有設置.USED_TO_BE_IN_SETTINGS_DOT_PY將需要任何更改。我錯過了什麽嗎?