2017-02-14 34 views
1

我在将第三方“用户帐户”应用程序添加到W project项目时遇到了问题。Django W Project项目 - 与django.contrib.sites冲突(使用django-allauth)

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

当我在INSTALLED_APPS和wagtail.wagtailsite应用程序中包含django-allauth依赖项(包括必需的django.contrib.sites)时,我遇到了正确加载站点的问题(静态文件加载不正确,例如)。我无法准确追踪哪些内容不能正确加载,但从我所知道的情况来看,这是w''网站'应用程序与django'网站'应用程序之间的运行时冲突。

似乎应该有一种方法让w and和django-allauth并行运行......有没有人有django-alluth和w working一起工作很好?这是可能的吗?你需要做什么?

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

版本: 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> 

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

回答

1

这个问题的解决方案是我的项目,具体的应用程序后,包括这些INSTALLED_APPS:

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

这防止allauth base.html文件被使用,而我的“myApp1” base.html文件加载正确。

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

谢谢。

+0

如果您在'TEMPLATES'中启用了'APP_DIRS',则'INSTALLED_APPS'顺序对于查找模板非常重要。 Django将按顺序遍历这些应用程序,直到找到匹配的模板。这就是为什么我在我的例子中最后列出了'AUTH_APPS'的原因。接得好! – FlipperPA

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

希望这有助于;有没有什么可以让你的设置更具体一些?也许分享你的设置文件?

+0

谢谢!我会在接下来的几天内将它与我的设置进行比较,并尽快提供更多详细信息。 – SecretSasquatch

+0

查看编辑的问题。我发现问题的根源...... – SecretSasquatch