当前位置: 首页 > 面试题库 >

Django使用参数返回redirect()

袁建木
2023-03-14
问题内容

在我的视图函数中,我想调用另一个视图并将数据传递给它:

return redirect('some-view-name', backend, form.cleaned_data)

,其中backend是registration.backends对象,而form.cleaned_data是表单数据的字典(但必须同时以 args或* kwargs发送,以防止引发Don't mix *args and **kwargs in call to reverse()!错误)。根据我在文档中找到的内容:

def my_view(request):
    ...
    return redirect('some-view-name', foo='bar')

看来我需要提供“ some-view-name”参数,但这仅仅是视图函数的名称还是url的名称?因此,我想使其与在django-registration中完成的方式类似,其中:

to, args, kwargs = backend.post_registration_redirect(request, new_user)
return redirect(to, *args, **kwargs)

def post_registration_redirect(self, request, user):
    return ('registration_complete', (), {})

好吧,现在,我可以直接调用我的视图函数还是需要为其提供一个URL?还有更重要的是,我的funciotn调用(如果需要,还有一个网址)应该是什么样子?后端和cleaned_data都通过此视图传递,以供以后使用。我已经尝试过了,但这是不合适的:

url(r'^link/$', some-view-name)   
def some-view-name(request, *args):

以及这个:

return redirect('some_url', backend=backend, dataform.cleaned_data) 
url(r'^link/$', some-view-name)    
def some-view-name(request, backend, data):

仍然是NoReverseMatch。但是在django注册中,我看到了这样的内容:

url(r'^register/$',register,{'backend': 'registration.backends.default.DefaultBackend'}, name='registration_register'),

def register(request, backend, success_url=None, form_class=None,
             disallowed_url='registration_disallowed',
             template_name='user/login_logout_register/registration_form.html',
             extra_context=None):

问题答案:

首先,你的URL定义根本不接受任何参数。如果要将参数从URL传递到视图中,则需要在urlconf中定义它们。

其次,还不清楚你对cleaned_data字典会发生什么。别忘了你不能重定向到POST-这是HTTP的局限性,而不是Django-因此你的cleaned_data要么需要是一个URL参数(可怕的),要么是一系列更好的GET参数-因此,URL将采用以下形式:

/link/mybackend/?field1=value1&field2=value2&field3=value3

等等。在这种情况下,URLconf定义中不包括field1,field2和field3,它们可通过查看在视图中request.GET。

因此,你的urlconf将是:

url(r'^link/(?P<backend>\w+?)/$', my_function)

该视图如下所示:

def my_function(request, backend):
   data = request.GET

而相反的是(导入后urllib):

return "%s?%s" % (redirect('my_function', args=(backend,)),
                  urllib.urlencode(form.cleaned_data))

评论后编辑

一直以来,使用重定向和反向操作的全部目的是转到URL-它返回一个Http代码,该代码使浏览器重定向到新URL并进行调用。

如果你只想从代码中调用视图,则直接执行即可-根本不需要使用反向。

就是说,如果你只想存储数据,那么只需将其放入会话中即可:

request.session['temp_data'] = form.cleaned_data


 类似资料:
  • 本文向大家介绍使用Django的JsonResponse返回数据的实现,包括了使用Django的JsonResponse返回数据的实现的使用技巧和注意事项,需要的朋友参考一下 urls.py 在views.py中创建show_view函数 到此这篇关于使用Django的JsonResponse返回数据的实现的文章就介绍到这了,更多相关Django JsonResponse内容请搜索呐喊教程以前的文

  • 我试图创建一个返回泛型类型参数的方法。 我有一个类车辆订单扩展抽象类订单。在类订单中,我创建了一个抽象方法接收HiredObject。这个方法不会接收任何参数,并将返回一个泛型。 我在VehicleOrder类中实现了这个方法,并将其设置为返回类参数vehicle。 问题是,当我实例化一个新的VeilceOrderorororororororororororororderororororororo

  • 本文向大家介绍Django返回json数据用法示例,包括了Django返回json数据用法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Django返回json数据用法。分享给大家供大家参考,具体如下: 1、前端。jQuery发送GET请求,并解析json数据。getJSON方法可参考这里。 2、后端。Django接收GET请求并返回json数据。 更多关于Python相关内容感兴趣

  • 问题内容: 我有一个内部进行一些修改的函数,它返回一个值。 最初的想法是做这样的事情: 不幸的是,这不适用于Oracle。建议做这种事情的方法是什么? 有没有办法从我的陈述中提取声明的变量? 问题答案: Hibernate Session提供了一种直接访问的方法。然后,您可以创建并用于执行功能:

  • 本文向大家介绍Django中使用Json返回数据的实现方法,包括了Django中使用Json返回数据的实现方法的使用技巧和注意事项,需要的朋友参考一下 在一个网站在,大量数据与前端交互,JSON是最好的传递数据方式了。 在Django中,使用JSON传输数据,有两种方式,一种是使用Python的JSON包,一种是使用Django的JsonResponse 方法一:使用Python的JSON包 我们

  • 问题内容: 我正在用Django + jQuery测试ajax。我认为: 这在我的模板中: 我的问题是-为什么这会在我的HTML页面中返回“ Not ajax”? 问题答案: 我不知道你怎么了 我测试并取得了良好的消息:。我的代码: urls.py views.py templates / home.html