我正在开发一个开源Django应用程序,并为它创建了一些设计。现在,客户希望使用自己的,受版权保护的设计。在阅读Django文档后,我创建了一个单独的私有GIT存储库,我想将其用于新设计。通过在设置中添加2个项目,我几乎可以使用它;在“funder_custom_templates”文件夹中查找模板的额外条目,以及在同一位置查找静态文件的额外条目。这就是我配置TEMPLATES和STATICFILES_DIR的方式:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(PROJECT_DIR, '..', '..', 'funder_custom_templates'),
os.path.join(PROJECT_DIR, 'templates'),
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'fundraiser.context_processors.cart',
],
},
},
]
STATICFILES_DIRS = [
os.path.join(PROJECT_DIR, '..', '..', 'funder_custom_templates','static'),
os.path.join(PROJECT_DIR, 'static'),
]
当我按照预期创建funder_customer_templates / base.html和所有静态文件时,这适用于覆盖位于PROJECT_DIR / templates / base.html中的基本设计。但我也希望覆盖特定于应用的模板文件,例如blog / templates / blog / blog_index_page.html
我尝试将这些文件放在funder_custom_templates的根目录中,并尝试模仿funder_custom_templates中的app文件夹结构,但这不会加载特定于应用程序的模板。有办法解决这个问题吗?
具有文件夹结构的示例项目文件位于:https://github.com/acidjunk/funder/tree/develop/
答案 0 :(得分:1)
由于您使用app_directories.Loader
类加载模板(通过设置'APP_DIRS': True,
指定),然后对于app specfic模板,Django将遍历您的INSTALLED_APPS
设置以查找特定的模板文件。这里重要的是它按顺序执行。
因此,如果您要覆盖blog/templates/blog/blog_index_page.html
,那么您需要在custom_blog/templates/blog/blog_index_page.html
之前的应用程序中包含blog
。
我建议在自己的django应用程序和python包中包装所有自定义静态资源。这样,您只需从其私有存储库中安装该软件包,并将其添加到已安装的应用程序列表中,即可覆盖任何静态内容和模板。
有关模板加载的更多详细信息,请参阅Django的文档:https://docs.djangoproject.com/en/1.9/ref/templates/api/#django.template.loaders.app_directories.Loader