Django中应用程序特定的默认设置?

时间:2014-01-16 12:41:05

标签: python django

我正在将我的网站划分为许多小型(希望可重复使用)的应用程序,我想知道如何最好地提供最终用户可以覆盖的默认设置?

我可以在任何地方做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

这是一种合理的方法吗,或者我错过了一些明显的东西?

4 个答案:

答案 0 :(得分:3)

使用django-appconf

它以一种很好的方式解决了这个问题,我可以在这里引用它的README,但这有点无意义。

答案 1 :(得分:1)

就我而言,我不会以这种方式混淆INSTALLED_APPS。 Wrt /其他设置,规范解决方案是

  • 从appsettings.py文件导入全局设置
  • 此处根据gobal设置中的定义设置值
  • 仅在您的应用程序中使用appsettings。

的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)