Python Django-注销视图自定义失败 虽然原来的问题被澄清了,但有一个新的相关问题非常有趣:(请让我知道我的理论是否完全正确…)
请在下面签出我的URL模式:Python Django-注销视图自定义失败 虽然原来的问题被澄清了,但有一个新的相关问题非常有趣:(请让我知道我的理论是否完全正确…),python,django,url,view,logout,Python,Django,Url,View,Logout,请在下面签出我的URL模式: 从django.contrib.auth导入视图作为auth\u视图 来自精品店。车型进口类别 从django.url导入路径,包括 从…起导入视图 应用程序名称='用户' URL模式=[ #自定义登录视图的步骤 路径('login/',auth_views.LoginView.as_view(额外上下文={'categories':Category.objects.get_categories_with_item()})), #路径('login/',views.
从django.contrib.auth导入视图作为auth\u视图
来自精品店。车型进口类别
从django.url导入路径,包括
从…起导入视图
应用程序名称='用户'
URL模式=[
#自定义登录视图的步骤
路径('login/',auth_views.LoginView.as_view(额外上下文={'categories':Category.objects.get_categories_with_item()})),
#路径('login/',views.NewLoginView.as_view()),
#自定义默认注销视图的步骤
路径('logout/',auth_views.LogoutView.as_view(),{'categories':Category.objects.get_categories_with_item()}),
#包括django身份验证URL
路径(“”,包括('django.contrib.auth.url'),
正如您可能注意到的,有两种不同的方式来传递额外的\u上下文
,有趣的是:LogoutView
上使用的方法不能用于LoginView
!!。然而,LoginView
上使用的方法确实适用于LogoutView
我认为可能的解释是,他们继承了不同的观点,这一点尚待你们确认:
LoginView
:
class LoginView(SuccessURLAllowedHostsMixin,FormView):
"""
显示登录表单并处理登录操作。
"""
form\u class=身份验证表单
身份验证形式=无
重定向\字段\名称=重定向\字段\名称
模板名称='registration/login.html'
重定向\u已验证\u用户=False
额外上下文=无
...
def获取上下文数据(自身,**kwargs):
context=super()。获取上下文数据(**kwargs)
当前站点=获取当前站点(self.request)
context.update({
self.redirect_字段名称:self.get_redirect_url(),
“站点”:当前_站点,
“site\u name”:当前的\u site.name,
**(self.extra_上下文或{})
})
返回上下文
注销视图
:
class LogoutView(SuccessURLAllowedHostsMixin,TemplateView):
"""
注销用户并显示“您已注销”消息。
"""
下一页=无
重定向\字段\名称=重定向\字段\名称
模板名称='registration/logged\u out.html'
额外上下文=无
...
def获取上下文数据(自身,**kwargs):
context=super()。获取上下文数据(**kwargs)
当前站点=获取当前站点(self.request)
context.update({
“站点”:当前_站点,
“site\u name”:当前的\u site.name,
“标题”:(“注销”),
**(self.extra_上下文或{})
})
返回上下文
我认为LoginView
必须将额外的上下文作为位置参数传递给。as\u view()
的原因是它不是从模板视图继承的:
class TemplateView(TemplateResponseMixin、ContextMixin、View):
"""
呈现模板。将关键字参数从URLconf传递到上下文。
"""
def get(自我、请求、*args、**kwargs):
上下文=自身。获取上下文数据(**kwargs)
返回self.render\u to\u响应(上下文)
它有一个get
方法来获取上下文数据…如果我没弄错的话
有人能证实这一点吗?
我是python和django框架的新手。非常感谢
原来的问题已经回答了
请在评论会话中签出答案--
我是Django的新手,为了在更多的上下文中传递到注销视图,我尝试了两种方法来定制注销视图:
方法1:
从django.contrib.auth导入视图作为auth\u视图
来自精品店。车型进口类别
应用程序名称='用户'
URL模式=[
...
路径('logout/',auth_views.LogoutView.as_view(),{'categories':Category.objects.all()}),
#我也试过:
#路径('logout/',auth_views.LogoutView.as_view({'categories':Category.objects.all()}),
#我也试过:
#路径('logout-customized-url/',auth_views.LogoutView.as_view(),{'categories':Category.objects.all()),
#这正在工作,但在注销时不会自动重定向到此路径
方法2:
。。。
路径('logout/',views.NewLogoutView.as_view()),
#NewLogoutView代码如下:
views.py
来自精品店。模型导入类别
从django.contrib.auth.views导入LogoutView
类NewLogoutView(LogoutView):
def获取上下文数据(自身,**kwargs):
context=super()。获取上下文数据(**kwargs)
上下文['categories']=Category.objects.all()
返回上下文
仍然不起作用,结果是完全一样的:如果使用自定义url,例如“注销/”而不是“注销/”,并且您键入url,它会使用额外的上下文呈现正确的页面。但是,当用户正常注销时,不会转到该页面
有什么解决方法吗?谢谢!您需要在url.py
中传递extra\u context
,以便将额外的上下文发送到注销视图。有关详细信息,请阅读
您需要在url.py
中传递extra_context
,以便将额外的上下文发送到注销视图。有关详细信息,请阅读
明白了!!问题是按照我的urlpatterns顺序出现的,最初是这样的:
urlpatterns=[
#包括django身份验证URL
路径(“”,包括('django.contrib.auth.url'),
#自定义默认注销视图的步骤
路径('logout/',auth_views.LogoutView.as_view(),{'categories':Category.objects.get_categories_with_item()}),
基于,django.contrib.auth.url
包括许多url模式,例如:
accounts/login/[name='login']
帐户/logout/[name='logout']
帐户/密码\u更改/[名称]=
path(
'logout/',
auth_views.LogoutView.as_view(),
{'extra_context':{'categories': Category.objects.all()}}
),