Django 如何为基于类的登录视图添加额外的上下文?
我以前使用的是Django 如何为基于类的登录视图添加额外的上下文?,django,django-authentication,Django,Django Authentication,我以前使用的是Django==2.0.6,现在我想把它升级到Django==2.2.3。通过一些研究,我了解到在django-2.1中,旧的基于函数的登录、注销视图已经被删除 我仍然想根据我的项目要求为LoginView添加一些额外的上下文 以前使用基于函数的视图时,我已完成以下操作: from django.contrib.auth.views import login as auth_views_login def login(*args, **kwargs): """
Django==2.0.6
,现在我想把它升级到Django==2.2.3
。通过一些研究,我了解到在django-2.1中,旧的基于函数的登录、注销视图已经被删除
我仍然想根据我的项目要求为LoginView
添加一些额外的上下文
以前使用基于函数的视图时,我已完成以下操作:
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)
以及在URL中:
url(r'login/$', views.login,
{'template_name': 'login.html'}, name="login"),
由于
Django==2.2
不支持上述内容,如何将额外的上下文传递给基于类的登录视图。我认为您可以这样使用LoginView:
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"),
我认为您可以像这样使用LoginView:
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"),