允许多个应用在Django中使用{%extend base.html%}而不会发生冲突?

时间:2015-02-11 06:31:53

标签: django templates django-allauth template-inheritance

我最近刚刚开始使用Django,并且假设必须有一个很好的解决方案来解决这个问题!

通过pip安装django-allauth之后,它尝试从我的base.html文件夹而不是从它自己的子目录扩展project/templatesThis user遇到了同样的问题,并被告知要重命名其中一个base.html文件,然后在相关的应用模板中更新对它的所有引用。对于复杂的应用程序(已经很糟糕),这很容易出错;如果多个第三方应用分别定义了自己的base.html并将其简称为{% extends 'base.html' %},那就更糟了。此外,我认为这仅适用于第三方应用程序,因为我可以轻松地为我自己的应用程序命名base.html不同的东西,但我不想搞乱使用第三方应用程序。

我的问题是:是否有一种安全/简便的方法可以让多个第三方应用使用{% extends 'base.html' %}而不会发生冲突

我已阅读Django中template inheritance的文档,并了解:

  • 默认情况下,首先从文件系统加载模板,然后从app子目录加载模板。因此,我的projects/templates目录(在我的TEMPLATE_DIRS设置中定义)将首先被调用;因此django-allauth问题。
  • 我可以通过更改TEMPLATE_LOADERS的顺序来反转此订单,首先调用app子目录。但是,这只是意味着我的网站现在会扩展错误的base.html

虽然我可以通过将allauth的base.html重命名为allauthbase.html并将子模板引用更改为{% extends 'allauthbase.html' %}来修复当前的冲突,但这看起来很笨重。

最奇怪的是,this person抱怨默认情况下每个应用扩展自己的base.html,但这似乎不可能......

1 个答案:

答案 0 :(得分:0)

似乎存在与此问题相关的未解决问题: https://github.com/pennersr/django-allauth/issues/370