【问题标题】:Django Wagtail Project - Conflict with django.contrib.sites (using django-allauth)Django Wagtail 项目 - 与 django.contrib.sites 冲突(使用 django-allauth)
【发布时间】:2017-02-14 02:41:23
【问题描述】:

在将第 3 方“用户帐户”应用添加到 Wagtail 项目时遇到问题。

大多数第 3 方用户帐户应用程序(例如 django-alluth)需要 django.contrib.sites 作为依赖项。

当我在 INSTALLED_APPS 中包含 django-allauth 依赖项(包括所需的 django.contrib.sites)以及 wagtail.wagtailsite 应用程序时,我遇到了正确加载站点的问题(静态文件无法正确加载,因为例子)。我无法准确追踪哪些内容没有正确加载,但据我所知,这是 wagtail 'sites' 应用程序和 django 'sites' 应用程序之间的运行时冲突。

似乎应该有一种方法可以让 wagtail 和 django-allauth 并排运行......有没有人让 django-alluth 和 wagtail 一起工作得很好?有可能吗?你需要做什么?

非常感谢 django-alluth 和 Wagtail 一起工作的任何提示或示例。

版本: Django 1.10.1, 鹡鸰 1.8

编辑:

好的,当我拥有所有 django-allauth 依赖项时,我发现为什么我的静态文件无法正确加载。看起来我通常被调用的项目 base.html 文件正在被 allauth 包中的 baste.html 取代。我需要防止调用 django-allauth base.html 文件。这是覆盖我通常的 html 部分的 django-allauth base.html:

 <!DOCTYPE html>
<html>
  <head>
    <title>{% block head_title %}{% endblock %}</title>
    {% block extra_head %}
    {% endblock %}
  </head>
  <body>
    {% block body %}

    {% if messages %}
    <div>
      <strong>Messages:</strong>
      <ul>
    {% for message in messages %}
    <li>{{message}}</li>
    {% endfor %}
      </ul>
    </div>
    {% endif %}

    <div>
      <strong>Menu:</strong>
      <ul>
    {% if user.is_authenticated %}
    <li><a href="{% url 'account_email' %}">Change E-mail</a></li>
    <li><a href="{% url 'account_logout' %}">Sign Out</a></li>
    {% else %}
    <li><a href="{% url 'account_login' %}">Sign In</a></li>
    <li><a href="{% url 'account_signup' %}">Sign Up</a></li>
    {% endif %}
      </ul>
    </div>
    {% block content %}
    {% endblock %}
    {% endblock %}
    {% block extra_body %}
    {% endblock %}
  </body>
</html>

我现在要研究如何解决这个问题。如果你知道怎么做,那将是一个可以接受的答案:)

【问题讨论】:

    标签: python django django-allauth wagtail sites


    【解决方案1】:

    我已经成功地一起运行了。这是我的需求文件的 sn-p:

    Django>=1.10,<1.11
    django-allauth==0.27.0
    wagtail>=1.8,<1.9
    

    这是我处理已安装应用程序的方式:

    PREREQ_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.humanize',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        ...
    ]
    
    AUTH_APPS = [
        'django.contrib.sites',
        'allauth',
        'allauth.account',
        'allauth.socialaccount',
        'allauth.socialaccount.providers.facebook',
        'allauth.socialaccount.providers.google',
        'allauth.socialaccount.providers.twitter',
    ]
    
    SITE_ID = 1
    
    WAGTAIL_APPS = [
        'wagtail.wagtailcore',
        'wagtail.wagtailadmin',
        'wagtail.wagtaildocs',
        'wagtail.wagtailsnippets',
        'wagtail.wagtailusers',
        'wagtail.wagtailimages',
        'wagtail.wagtailembeds',
        'wagtail.wagtailsearch',
        'wagtail.wagtailsites',
        'wagtail.wagtailredirects',
        'wagtail.wagtailforms',
        'wagtail.contrib.modeladmin',
        'wagtail.contrib.table_block',
    
        'wagtailfontawesome',
        'wagtailerrorpages',
        'wagtailgridder',
        'taggit',
        'modelcluster',
    ]
    
    PROJECT_APPS = [
         ...
    ]
    
    INSTALLED_APPS = PREREQ_APPS + WAGTAIL_APPS + PROJECT_APPS + AUTH_APPS
    

    中间件:

    # Middleware
    MIDDLEWARE_CLASSES = [
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    
        'wagtail.wagtailcore.middleware.SiteMiddleware',
        'wagtail.wagtailredirects.middleware.RedirectMiddleware',
    ]
    

    还有静态文件:

    STATICFILES_FINDERS = (
        'django.contrib.staticfiles.finders.FileSystemFinder',
        'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    )
    
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, "static/"),
    )
    

    希望这会有所帮助;您的设置中有什么可以更具体的吗?也许共享您的设置文件?

    【讨论】:

    • 谢谢!我会在接下来的几天内将其与我的设置进行比较,然后尽快回复您...提供更多详细信息。
    【解决方案2】:

    这个问题的解决方案是在我的项目特定应用之后包含这些 INSTALLED_APPS:

    ...
    'myApp1'
    ...
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    

    这会阻止使用 allauth base.html,并且我的“myApp1”base.html 无法正确加载。

    我没有意识到 INSTALLED_APPS 的顺序会影响加载行为。

    谢谢。

    【讨论】:

    • INSTALLED_APPS 顺序对于查找模板很重要,如果您在 TEMPLATES 中启用了 APP_DIRS。 Django 将按顺序遍历应用程序,直到找到匹配的模板。这就是为什么我在示例中最后列出了AUTH_APPS。好收获!
    猜你喜欢
    • 2016-01-23
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多