【发布时间】:2015-04-11 10:40:36
【问题描述】:
我最近才开始使用 Django,并且假设这个问题必须有一个好的解决方案!
通过 pip 安装 django-allauth 后,它尝试从我的 project/templates 文件夹而不是它自己的子目录扩展 base.html。 This user 有同样的问题,并被告知重命名 base.html 文件之一,然后在相关的应用程序模板中更新对其的所有引用。对于复杂的应用程序(已经很糟糕),这很容易出错;如果多个第三方应用程序都定义了自己的base.html 并将其简称为{% extends 'base.html' %},那就更糟了。另外,我认为这仅适用于第三方应用程序,因为我可以轻松地为我自己的每个应用程序命名 base.html 不同的名称,但我不想乱用可以工作的第三方应用程序。
我的问题是:有没有一种安全/简单的方法可以让多个第三方应用使用{% extends 'base.html' %} 而不会发生冲突?
我已阅读 Django 中template inheritance 上的文档并了解:
- 默认情况下,模板首先从文件系统加载,然后从应用子目录加载。因此,在我的
TEMPLATE_DIRS设置中定义的projects/templates目录将首先被调用;因此出现了 django-allauth 问题。 - 我可以通过更改
TEMPLATE_LOADERS的顺序来反转这个顺序,以便首先调用应用程序子目录。然而,这只是意味着 我的网站 现在将扩展错误的base.html。
虽然我可以通过将 allauth 的 base.html 重命名为 allauthbase.html 并将对它的子模板引用更改为 {% extends 'allauthbase.html' %} 来解决当前的冲突,但这似乎很笨重。
最奇怪的是,this person 抱怨每个应用程序默认扩展自己的 base.html,但这似乎是不可能的......
【问题讨论】:
标签: django templates django-allauth template-inheritance