【发布时间】:2010-12-11 22:45:04
【问题描述】:
这是我的情况……
我正在尝试在 django 站点上的 settings.py 文件中动态生成一堆东西。
我正在设置几个站点(通过站点框架),并且我希望将一些值插入到一个函数中,该函数将为每个站点生成一部分设置文件。
例如:
from universal_settings import *
SITE_NAME = 'First Site'
SITE_SLUG = 'firstsite'
DEFAULT_FROM_EMAIL = '%s <noreply@otakupride.com>' % SITE_NAME
ROOT_URLCONF = 'mysite.urls.%s' % SITE_SLUG
TEMPLATE_DIRS += ( os.path.join(PROJECT_ROOT, "templates", SITE_SLUG), )
显然,在运行此代码的每个站点的设置文件中都包含最后 3 行是对 DRY 的巨大违反。所以我想做这样的事情
from universal_settings import *
from utils import get_dynamic_settings
SITE_NAME = 'First Site'
SITE_SLUG = 'firstsite'
get_dynamic_settings( locals() )
这里是函数
# WARNING: THIS CODE DOES NOT WORK!
def get_dynamic_settings(context_dict):
global DEFAULT_FROM_EMAIL
global ROOT_URLCONF
global TEMPLATE_DIRS
DEFAULT_FROM_EMAIL = '%s <noreply@otakupride.com>' % context_dict['SITE_NAME']
ROOT_URLCONF = 'mysite.urls.%s' % context_dict['SITE_SLUG']
TEMPLATE_DIRS += ( os.path.join(PROJECT_ROOT, "templates", context_dict['SITE_SLUG']), )
所以我的问题是...如何将内容添加到设置文件的范围内?它似乎没有可用于其中变量的 dict 对象。
也许我做错了?感谢您的帮助!
PS - 我对 global 关键字的理解是,它告诉编译器该函数意味着在 在它自己的文件中操作全局变量 - 文件中是否存在这样的东西函数被调用了吗?
【问题讨论】:
标签: python django scope settings