首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为基于类的登录视图添加额外的上下文?

如何为基于类的登录视图添加额外的上下文?
EN

Stack Overflow用户
提问于 2020-01-18 14:48:42
回答 1查看 780关注 0票数 0

我之前使用的是Django==2.0.6,现在我想把它升级到Django==2.2.3。通过一些研究,我了解到在django-2.1中,旧的基于函数的登录和注销视图已被删除。

我仍然想根据我的项目需求向LoginView添加一些额外的上下文。

在使用基于函数的视图之前,我已经做了以下工作:

代码语言:javascript
复制
 from django.contrib.auth.views import login as auth_views_login

def login(*args, **kwargs):
    """
    Auth Login View
    """
    ecom_company = Ecom_Company.objects.filter(pk=1).first()
    landing_details = Landing.objects.filter(company=ecom_company).first()
    category_list = Categories.objects.filter(
        company=ecom_company).exclude(name__exact='Lab Test').order_by('id')
    partners_list = Partners.objects.filter(
        company=ecom_company).order_by('-id')
    stock_list = StockItem.objects.filter(
        organisation=ecom_company.organisation).order_by('id')

    context = {
        'ecom_company': ecom_company,
        'landing_details': landing_details,
        'category_list': category_list,
        'partners_list': partners_list,
        'stock_list': stock_list
    }

    return auth_views_login(*args, extra_context=context, **kwargs)

在urls中:

代码语言:javascript
复制
url(r'login/$', views.login,
        {'template_name': 'login.html'}, name="login"),

我如何传递基于类的登录视图的额外上下文,因为Django==2.2不支持以上内容。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-18 15:43:33

我认为你可以这样使用LoginView:

代码语言:javascript
复制
from django.contrib.auth import views as auth_views

class MyLoginView(auth_views.LoginView):
    template_name = 'login.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        ecom_company = Ecom_Company.objects.filter(pk=1).first()
        landing_details = Landing.objects.filter(company=ecom_company).first()
        category_list = Categories.objects.filter(
        company=ecom_company).exclude(name__exact='Lab Test').order_by('id')
        partners_list = Partners.objects.filter(
        company=ecom_company).order_by('-id')
        stock_list = StockItem.objects.filter(
        organisation=ecom_company.organisation).order_by('id')
        context.update({
            'ecom_company': ecom_company,
            'landing_details': landing_details,
            'category_list': category_list,
            'partners_list': partners_list,
            'stock_list': stock_list
        }
        return context

# url
url(r'login/$', views.MyLoginView.as_view(), name="login"),
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59798226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档