Skip to main content
 首页 » 编程设计

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

2024年10月01日44freeliver54

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

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

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

似乎应该有办法让 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> 

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

请您参考如下方法:

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

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

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