将当前站点的域添加到模板目录

时间:2018-04-24 16:11:42

标签: django django-templates django-sites

将额外的特定于站点的模板目录添加到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;?

或者我应该使用扩展版本的设置文件吗?

1 个答案:

答案 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.pydev.pylocal.pyproduction.py等。运行Django Development Server时,我运行命令:

python manage.py runserver --settings=core.settings.local