2017-02-14 69 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