Django命名空间配置后仍出现模板冲突问题求助
问题解决:Django多应用同名模板冲突
问题根源
URL命名空间仅用于解决路由名称冲突,和模板查找机制无关。当你设置APP_DIRS = True时,Django会按照INSTALLED_APPS里的应用顺序,逐个遍历应用的templates目录,只要找到文件名匹配的模板就直接使用,这就是为什么调换应用顺序会反转问题的原因。
解决步骤
调整模板目录结构
给每个应用的模板文件套一层以应用名为名称的子目录,避免文件名冲突:dj_apps/simplevent/templates/simplevent/landing.htmldj_apps/nexttrain/templates/nexttrain/landing.html
修改视图中的模板路径
对应修改两个应用视图里的template_name,指向新的模板路径:- simplevent应用的视图:
class Landing(TemplateView): template_name = "simplevent/landing.html" - nexttrain应用的视图:
class Landing(TemplateView): template_name = "nexttrain/landing.html"
- simplevent应用的视图:
这样修改后,Django就能精准定位到对应应用的模板文件,不会再出现跨应用的模板加载错误。这也是Django官方推荐的模板组织方式,能从根源上避免同名模板的冲突问题。
内容的提问来源于stack exchange,提问作者David Dahan
相关产品推荐
相关产品推荐

