我正在尝试覆盖django-machina的基本论坛模板。
我已经将board_base.html
的内容从github source复制到/app/forum/templates/machina/board_base.html
中。
我的设置文件包含一个模板部分,如下所示:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR, 'templates'),
MACHINA_MAIN_TEMPLATE_DIR,
],
#snip
Django肯定在找那个目录:如果我设置了一个指向不存在的模板文件的视图,那么在错误页面上Django报告的第一个路径是:
/app/forum/templates/nothing.html (Source does not exist)
我错过了什么?为什么我不能覆盖那个模板?
编辑:
因此,DIRS
现在看起来如下所示:
'DIRS': [
MACHINA_MAIN_TEMPLATE_DIR,
],
我有一个单独的应用程序,forum_templates
,有自己的模板目录。INSTALLED_APPS
看起来像:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'forum_templates',
'core',
# Machina related apps:
'mptt',
'haystack',
'widget_tweaks',
] + get_machina_apps()
如果注解掉DIRS
中的MACHINA_MAIN_TEMPLATE_DIR
,则会出现预期的TemplateDoesNotExist
错误,其中列出了以下路径:
/usr/local/lib/python3.6/site-packages/django/contrib/admin/templates/partials/breadcrumb.html
/usr/local/lib/python3.6/site-packages/django/contrib/auth/templates/partials/breadcrumb.html
/app/forum/forum_templates/templates/partials/breadcrumb.html
/app/forum/core/templates/partials/breadcrumb.html
/usr/local/lib/python3.6/site-packages/mptt/templates/partials/breadcrumb.html
/usr/local/lib/python3.6/site-packages/haystack/templates/partials/breadcrumb.html
/usr/local/lib/python3.6/site-packages/machina/templates/partials/breadcrumb.html
所以我从github复制了相关的文件并保存到/app/forum/forum_templates/templates/partials/breadcrumb.html
;当我重新加载时,错误移动到下一个模板文件。
如果我把MACHINA_MAIN_TEMPLATE_DIR
加回DIRS
..它会再次从machina加载所有默认模板,忽略我的forum_templates
应用程序中的覆盖。
这是怎么回事?
2条答案
按热度按时间oiopk7p51#
这对我很有效:
现在转到你的基本目录
/templates
并将原始的Machina模板移动到这个新的位置。注意目录级别,你可能需要做一些实验。删除原始的Machina模板目录,以迫使它找到你的新文件。5gfr0r5j2#
对于任何可能仍然遇到这个问题的人,我发现关于自定义的文档中有点不清楚的是,为了覆盖模板,你应该不在你的
templates/
目录中添加machina/
文件夹。相反,你应该直接添加子应用文件夹,例如templates/forum/forum_detail.html
和不templates/machina/forum/forum_detail.html
。board_base.html
)的覆盖应放置在模板的根目录中,例如templates/board_base.html