将额外的特定于站点的模板目录添加到Django中的模板目录设置的正确方法是什么?
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
<PREPEND SITE-BASED TEMPLATE DIR IN HERE>
str(APPS_DIR.path('templates')),
],
'OPTIONS': {
'debug': DEBUG,
'loaders': [
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
],
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.template.context_processors.i18n',
'django.template.context_processors.media',
'django.template.context_processors.static',
'django.template.context_processors.tz',
'django.contrib.messages.context_processors.messages',
],
},
},
]
我显然不能在那里使用Site.objects.get_current()。
我可以编写自己的模板加载器来使用它,但这是&#34;正确&#34;?
或者我应该使用扩展版本的设置文件吗?
答案 0 :(得分:0)
首先,首先分开设置。您应该具有如下设置层次结构:
base_settings.py
siteA_settings.py
siteB_settings.py
在base_settings.py
上,您应该放置项目范围内的所有设置。
siteA_settings.py
(小孩)会覆盖base_settings
。
要使其特定于网站,您必须在SITE_ID
设置中添加每个设置文件。 siteA_settings.py
# Sites Framework
SITE_ID = 1
SITE_TITLE = 'First Site'
然后加载TEMPLATES
设置。它们在每个设置文件中可以不同。例如:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR, 'templates'),
],
'APP_DIRS': True,
... , etc.
就像模板一样,您可以选择为每个网站设置不同的设置(应用,电子邮件设置等)
然后,当您运行服务器时,您应指定要运行的设置(站点)。例如:
python manage.py runserver --settings=myproject.siteA_settings
其中myproject
是您的设置所在的应用。
不要忘记每次运行命令时都必须放置--settings
参数(包括makemigrations,migrate等)
通常,在我的项目中,我创建了一个core
应用,一个settings
目录,在其中,我放了base_settings.py
,dev.py
,local.py
, production.py
等。运行Django Development Server时,我运行命令:
python manage.py runserver --settings=core.settings.local