我正在将我的网站划分为许多小型(希望可重复使用)的应用程序,我想知道如何最好地提供最终用户可以覆盖的默认设置?
我可以在任何地方做getattr(settings, 'MYVAL', <default-value>)
,但那不是干(也不是漂亮)。
我提出的最好的是
myapp/appsettings.py
INSTALLED_APPS = ('my_dependency', 'myapp')
MYVAL = 42
然后在settings.py
:
from myapp import appsettings as MYAPP # MYAPP must be UPPER CASE
INSTALLED_APPS = (.....)
INSTALLED_APPS += MYAPP.INSTALLED_APPS # hide/encapsulate sub-dependencies
MYAPP.MYVAL = 5000 # override
然后在视图代码中:
from django.conf import settings
...
print settings.MYAPP.MYVAL
这是一种合理的方法吗,或者我错过了一些明显的东西?
答案 0 :(得分:3)
它以一种很好的方式解决了这个问题,我可以在这里引用它的README,但这有点无意义。
答案 1 :(得分:1)
就我而言,我不会以这种方式混淆INSTALLED_APPS
。 Wrt /其他设置,规范解决方案是
的myapp / appsettings.py
from django.conf import settings
ANSWER = getattr(settings, "MYAPP_ANSWER", 42)
SOMETHING_ELSE = getattr(settings, "MYAPP_SOMETHING_ELSE", None)
的myapp / models.py
from myapp import appsettings
class Question(object):
answer = appsettings.ANSWER
答案 2 :(得分:1)
我的方法是拥有一个local_settings.py
文件来补充项目的setting.py
。
<强> local_settings.py:强>
XINSTALLED_APPS = [
'myproject.app',
]
<强> settings.py:强>
INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
...
]
try:
from local_settings import *
except ImportError, exp:
pass
try:
INSTALLED_APPS += XINSTALLED_APPS # defined in local_settings
except NameError:
pass
答案 3 :(得分:0)
我已完成在我的上一个项目中这样:
from django.conf import settings
My_APP_ID = getattr(settings, 'My_APP_ID', None)
USER_EMIL_Is = getattr(settings, 'USER_EMIL_Is', Flase)