django - 无法从 3rd 方应用程序覆盖 django 模板
问题描述
我正在尝试覆盖django-machina的基本论坛模板。
我已将github 源board_base.html
中的内容复制到 ./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()
如果我注释掉MACHINA_MAIN_TEMPLATE_DIR
from DIRS
,我会得到预期的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
应用程序中的覆盖。
这是怎么回事?:(
解决方案
这对我有用:
from machina import MACHINA_MAIN_TEMPLATE_DIR
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': (
[os.path.join(BASE_DIR, 'templates')],
MACHINA_MAIN_TEMPLATE_DIR,
),
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
....
],
},
},
]
现在转到您的基本目录/templates
并将原始 Machina 模板移动到这个新位置。请注意目录级别,您可能需要进行一些试验。删除原始 Machina 模板目录以强制它找到您的新文件。
推荐阅读
- visual-studio-code - 使用 VS Code 打开新终端时设置默认工作目录
- node.js - 在使用“cypress run”进行测试后,332 次测试中有 276 次以“Skipped”结束
- javascript - 具有最小长度的 io-ts 数组类型?
- javascript - TypeError:无法读取未定义的属性“body1”
- python - check_diag 工作不正常,仅在 2 个“x”/“o”中显示胜利
- excel - Excel vba 运行时错误 91 对象变量或未设置块
- javascript - 如何正确实现日期选择器?
- wpf - 按钮 Triggerevent IsPressed 不起作用
- bash - 如何在 gitconfig 别名中注释 bash 脚本
- python - 我正在尝试验证用户输入是数字还是在给定范围内,试图删除以前单元格的历史记录