【发布时间】:2011-03-13 16:48:48
【问题描述】:
在我的视图函数中,我想调用另一个视图并将数据传递给它:
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 调用(如果需要,还有一个 url)应该是什么样子?后端和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-registration 中,我看到过这样的事情:
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):
【问题讨论】:
标签: python django redirect parameter-passing