修改模板路径后服务器未识别,报TemplateDoesNotExist错误求助
解决Wagtail Block模板路径修改后仍报TemplateDoesNotExist的问题
这问题我之前维护Wagtail项目时也踩过坑!明明改了CollapsiblePanelBlock的Meta模板路径,服务器却死咬着旧路径不放,重启和makemigrations都不管用,简直离谱。咱们一步步排查解决:
1. 先清Django的模板缓存
Django会把已加载的模板缓存起来,哪怕你改了代码,缓存里还是旧的路径。直接跑这个命令:
python manage.py clearcache
如果是开发环境,也可以试试删除项目根目录下的__pycache__文件夹,然后重启runserver——有时候自动重载没跟上Meta类的修改。
2. 检查有没有其他地方硬引用了旧模板
别光盯着Block类,看看这些地方:
- 有没有模板文件用
{% include "base/panel.html" %}直接引用了旧路径? - 其他Block类或者页面模型有没有复用这个模板?
- 是不是在
settings.py的TEMPLATES配置里,某个模板目录下还有一份base/panel.html,导致Django优先加载了它?
3. 确认新模板的位置完全正确
你改后的路径是block/panel.html,那要确保你的模板目录结构是这样的:
your_project/ templates/ block/ panel.html
而且settings.py的TEMPLATES里的DIRS或者APP_DIRS要能找到这个templates目录。比如:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR / 'templates'], 'APP_DIRS': True, # ...其他配置 }, ]
4. 强制刷新Wagtail的Block定义
Wagtail有时候会缓存Block的元数据,尤其是生产环境。可以试试这个小技巧:
- 临时把Block类的名字改成
CollapsiblePanelBlockV2(随便加个后缀) - 运行
python manage.py makemigrations和python manage.py migrate - 再把名字改回原来的
CollapsiblePanelBlock,重新跑一遍迁移
这会强制Django和Wagtail重新识别这个Block的配置,包括模板路径。
最后再验证一遍你的代码修改
你给出的代码修改是对的,对比一下:
修改前:
class CollapsiblePanelBlock(blocks.StructBlock): title=blocks.CharBlock() body=blocks.StreamBlock([ ('paragraph', blocks.RichTextBlock()), ]) class Meta: template='base/panel.html' icon='folder-inverse' label='Collapsible Panel'
修改后:
class CollapsiblePanelBlock(blocks.StructBlock): title=blocks.CharBlock() body=blocks.StreamBlock([ ('paragraph', blocks.RichTextBlock()), ]) class Meta: template='block/panel.html' icon='folder-inverse' label='Collapsible Panel'
确认没有拼写错误,比如block有没有写错,模板文件名是不是panel.html(Linux服务器上大小写敏感!)
按这些步骤走,应该就能解决这个顽固的缓存问题了!
内容的提问来源于stack exchange,提问作者jeffreyb
相关产品推荐
相关产品推荐

