首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Django注销内置视图中添加extra_context

在Django注销内置视图中添加extra_context
EN

Stack Overflow用户
提问于 2011-07-20 04:35:40
回答 3查看 8.9K关注 0票数 8

django/contrib/auth/views.py中有注销视图的定义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def logout(request, next_page=None,
       template_name='registration/logged_out.html',
       redirect_field_name=REDIRECT_FIELD_NAME,
       current_app=None, extra_context=None):

我想添加extra_context以消除注销时出现的“已注销”标题

所以我在我的url conf中尝试这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(r'^accounts/logout/$', logout(extra_context={'title':'something else'}) ),

但是随后我得到了这个错误: logout()至少接受1个非关键字参数(给定0),我做错了什么?ps:当我这样做的时候

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(r'^accounts/logout/$', logout ),

它起作用了,但是我收到了“注销”的文本...

谢谢,弗莱德

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-20 04:53:05

当您编写logout(extra_context={'title':'something else'})时,实际上是在URLconf中调用logout,这是不起作用的。Any URLconf tuple can have an optional third element, which should be a dictionary of extra keyword arguments to pass to the view function

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(r'^accounts/logout/$', logout, {'extra_context':{'title':'something else'}}),

或者,您也可以编写自己的视图,调用logout,传入所需的任何参数--这通常是在更复杂的情况下“扩展”基于函数的通用视图的方式。

票数 12
EN

Stack Overflow用户

发布于 2018-03-10 18:13:14

将我对django 2.0的发现添加到此主题的前一个答案中,不再适用于最新的django版本。

在2.0中,将URL添加到urls.py文件的正确方法是使用path():

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.urls import path
from django.contrib.auth import views as auth_views

path('accounts/logout/', auth_views.LogoutView.as_view(
  extra_context={'foo':'bar'}
)),

这里要突出显示的代码片段是.as_view()函数。Django 2.0将auth视图实现为类。您可以在Authentication Views documentation中阅读有关这方面的更多信息

然后使用`.as_view()将类“转换”为视图,并且可以将源代码中定义的任何类属性作为命名参数传入。

传入extra_context (默认为None)会自动将这些上下文变量暴露给您的模板。

您可以通过以下python路径访问LogoutView的源代码: django.contrib.auth.views

在这里,您可以看到可以传递给LogoutView和其他身份验证视图类的其他类属性。

票数 5
EN

Stack Overflow用户

发布于 2018-09-07 11:58:07

我在django 1.11中的标题和通用视图方面也遇到了类似的问题(尽管问题主要是因为我没有从2.0版本切换到docs版本)。我想通过extra_context将标题传递给从CreateView继承的视图,结果发现django的通用视图没有这样的属性。所以,这是我的拐杖:

  1. 创建自定义混合(希望这或多或少是ContextMixin在2.0中所做的):

类ExtraContextMixin():extra_context = {} def get_context_data(self,**kwargs):context =.get_context_data().get_context_data(**kwargs) context.update(self.extra_context) return context

  • 将混合添加到视图的祖先(这是我必须更改的所有代码):

CreateView):

  • Pass CustomView(ExtraContextMixin,来自url的类extra_context:

name='custom-view') (r‘^custom-view/$’,views.CustomView.as_view(extra_context={'title':'just any'}),url

不幸的是,我不知道这样的解决方案是否可以接受(显然,从2.0开始就不需要了),但至少它是有效的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6757062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文