Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-注销视图自定义失败 虽然原来的问题被澄清了,但有一个新的相关问题非常有趣:(请让我知道我的理论是否完全正确…)_Python_Django_Url_View_Logout - Fatal编程技术网

Python Django-注销视图自定义失败 虽然原来的问题被澄清了,但有一个新的相关问题非常有趣:(请让我知道我的理论是否完全正确…)

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.

请在下面签出我的URL模式:

从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()}}
),