使用基于类的视图将其他上下文变量数据传递到allauth视图

时间:2019-08-26 02:40:23

标签: python django django-class-based-views django-allauth

不确定如何将其他上下文数据传递到各种allauth表单中,这些表单包括我自己的模板。对于我自己的观点,我正在使用get_context_data(),它工作正常。我将小模板包含到主模板中,例如页眉,页脚,侧边栏等。一切正常,但当allauth启动时,例如登录,注销,电子邮件确认窗口等,我的上下文变量未传递,因此左侧的图像边栏没有显示,但是allauth可以正常工作。

我已经尝试了一些方法,但我认为理想的选择是从该功能的allauth视图继承,例如登录,密码重置,确认电子邮件等,提供我自己的上下文变量数据。

在我的accounts.views.py中,我期望它会失败,因为模板不存在,但是表单仍然显示,并且UserProfile图像未显示在左侧栏中。

from allauth.account.views import ConfirmEmailView

class EmailViewExt(ConfirmEmailView):
    template_name = "account/signup_alternate1.html"

    def get_context_data(self, **kwargs):
        context = super(ConfirmEmailView).get_context_data(**kwargs)
        context['userprofile'] = UserProfile.objects.get(user=self.request.user)
        return context

在我的模板left_bar_base.html中,该模板包含在我覆盖的allauth模板中。

{% if userprofile.avatar_picture %}
    <img src="{{ userprofile.avatar_picture.url }}" class="card-img-top" alt="...">
{% else %}
    <img src="{% static 'placeholder.png' %}" class="card-img-top" alt="...">
{% endif %}

在我的email_confirmation.html中,此图标位于顶部。

{% extends "ui/base.html" %}

{% load i18n %}
{% load account %}
{% block header %}
    {% include "ui/loggedin_header.html" %}
{% endblock %}
{% block left %}
        <div class="row no-gutters justify-content-start">
        {% include 'ui/left_bar_base.html' %}
{% endblock %}

{% block content %}
... allauth template code...

1 个答案:

答案 0 :(得分:0)

在整个解决方案中都可以使用

我的EmailViewExt(ConfirmEmailView)从未被调用。

因此,我没有使用allauths.urls,而是将其放在allauths.urls上方。

urlpatterns = [
    path('admin/', admin.site.urls),
    path('accounts/email/', EmailViewCustom.as_view(), name="email"),
    path('accounts/', include('allauth.urls')),

现在,我添加的上下文变量被传递到模板中。因此,我想我必须从allauth中添加所有要替换的URL。