Django Wagtail项目 - 与django.contrib.sites冲突(使用django-allauth)

时间:2017-02-14 02:41:23

标签: python django django-allauth wagtail sites

在向Wagtail项目添加第三方“用户帐户”应用时,我遇到了问题。

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

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

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

django-alluth和Wagtail合作的任何提示或示例都非常感谢。

版本: Django 1.10.1, W !! 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>

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

2 个答案:

答案 0 :(得分:1)

我已经成功地一起跑了。这是我的需求文件的片段:

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/"),
)

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

答案 1 :(得分:1)

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

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

这阻止了allauth base.html的使用,以及我的myApp1&#39; base.html正确加载。

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

感谢。