【问题标题】:Allow multiple apps to use {% extend base.html %} in Django without clashing?允许多个应用程序在 Django 中使用 {% extend base.html %} 而不会发生冲突?
【发布时间】:2015-04-11 10:40:36
【问题描述】:

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

通过 pip 安装 django-allauth 后,它尝试从我的 project/templates 文件夹而不是它自己的子目录扩展 base.htmlThis 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


    【解决方案1】:

    似乎有一个与该问题相关的未解决问题: https://github.com/pennersr/django-allauth/issues/370

    【讨论】:

    • 谢谢,我没看过这个。不过,我想知道是否有解决方案,或者这些应用是否只是被认为设计不佳。
    猜你喜欢
    • 2022-01-21
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多