最佳答案
在 view 函数中,我想调用另一个视图并将数据传递给它:
return redirect('some-view-name', backend, form.cleaned_data)
其中,后端是 registration.backend 对象,form.clean _ 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”参数,但它仅仅是 view 函数的名称,还是 url 的名称?因此,我想让它类似于在 django 注册中的方式,其中:
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', (), {})
现在,我可以直接调用 view 函数,还是需要为它提供一个 URL?更重要的是,我的函数调用(如果需要,还有一个 url)应该是什么样子?后端和 clean _ 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):
但是在姜戈注册中,我见过这样的情况:
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):