【问题标题】:Django-allauth loads wrong base.html templateDjango-allauth 加载错误的 base.html 模板
【发布时间】:2013-05-07 17:43:29
【问题描述】:

我已经尝试让 django-allauth 工作了几天,我终于发现了发生了什么。

该应用程序不会加载与 django-allauth 一起安装的 base.html 模板,而是加载我用于网站其余部分的 base.html 文件。

我如何告诉 django-allauth 使用 virtualenv/lib/python2.7/sitepackages/django-allauth 目录中的 base.html 模板而不是我的 project/template 目录?

【问题讨论】:

    标签: python django django-allauth


    【解决方案1】:

    我遇到了相反的问题:我试图使用自己的 base.html 文件,但我的 Django 项目正在获取 django-allauth 版本的 base.html。事实证明,您在settings.py 中定义INSTALLED_APPS 的顺序会影响模板的呈现方式。为了让 my base.html 渲染而不是 django-allauth 中定义的渲染,我需要将 INSTALLED_APPS 定义如下:

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        # custom
        'common',
        'users',
        'app',
        # allauth
        'django.contrib.sites',
        'allauth',
        'allauth.account',
        'allauth.socialaccount',
    ]
    
    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static'),
    ]
    

    【讨论】:

    • 我可以吻你。你让我免于基本放弃 allauth!
    【解决方案2】:

    除非直接调用,否则您的 base.html 是您定义的模板的扩展。

    例如,如果您渲染一个名为 Page.html 的模板 - 在顶部您将拥有 {% extends "base.html" %}

    如上定义时,base.html 位于您在 settings.py 下的 TEMPLATE_DIRS = () 下定义的路径中 - 根据您的描述,该路径定义为 project/template

    最好的办法是将 django-allauth base.html 文件复制到定义的 TEMPLATE_DIRS 位置,将其重命名为 allauthbase.html,然后通过 {% extends "allauthbase.html" %} 扩展模板以包含它而不是默认库。

    或者,您可以将子文件夹添加到您的模板位置,例如 project/template/allauth,将 allauth base.html 放在那里,然后使用 {% extends "allauth/base.html" %}

    【讨论】:

      【解决方案3】:

      两年后,这仍然是一个问题,并且公认的答案缺少一些新信息。

      github 上,我发现所有allauth 模板都派生自account/base.html,而account/base.html 派生自base.html。我的解决方案是:

      • virtualenv/lib/python2.7/sitepackages/django-allauth/templates 中,复制base.html 的全部内容以替换account/base.html 中的所有内容(即替换{% extends 'base.html' %} 语句)
      • 删除allauth的base.html。它现在是多余的。

      完成!

      【讨论】:

      • 是的。我当时不明白这些事情
      【解决方案4】:

      提供的所有答案都迫使您重写文件并修改自己的项目以适应 allauth,这是一个完全不可接受的工作流程。这样的第三方应用程序不应该对您自己的项目具有这种操纵能力。

      确实,处理这种情况的最简单方法(尤其是根据所提供的答案)是简单地将 allauth 应用程序及其相关应用程序移动到 INSTALLED_APPS 文件中 INSTALLED_APPS 列表的末尾。 Django 会先找到你的 base.html 模板,然后再在它下面列出的其他应用程序中找到另一个 base.html 模板。

      问题解决了。

      【讨论】:

        【解决方案5】:

        django-allauth 模板似乎扩展了 account/base.html (example),后者扩展了 base.html

        因此,将base.html 复制到例如myapp/templates/account/base.html,并确保myappdjango-allauth 之前加载(通过将INSTALLED_APPS 放在更高的位置)。

        现在 django 身份验证模板将扩展您的 account/base.html,这将是 django-allauthbase.html

        这并不完美,因为django-allauthbase.html 可能会更新,您会错过这些更新。但这似乎比重命名所有导入或更改 django-allauth 代码要好。

        请注意,您也可以在内容周围的base.html 中添加{% block content %},然后django-allauth 将使用该样式,这在许多情况下似乎是一件好事。

        【讨论】:

          【解决方案6】:

          Allauth 尝试扩展 myproject/templates/base.html。最简单的方法是将base.html 移动到myproject/templates/site/ 以获得myproject/templates/site/base.html 或简单地重命名base.html

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-12-15
            • 2021-07-01
            • 1970-01-01
            • 2016-05-16
            • 2020-10-25
            • 2019-07-11
            • 1970-01-01
            • 2021-05-01
            相关资源
            最近更新 更多