Dans ma fonction de vue, je veux appeler une autre vue et lui transmettre des données :
return redirect('some-view-name', backend, form.cleaned_data)
où backend est un objet registration.backends, et form.cleaned_data est un dict de données de formulaire (mais les deux doivent être envoyés en tant que *args ou **kwargs afin d'éviter de soulever des problèmes de type Don't mix *args and **kwargs in call to reverse()!
erreur). D'après ce que j'ai trouvé dans la documentation :
def my_view(request):
...
return redirect('some-view-name', foo='bar')
Il semble que je doive fournir l'argument 'some-view-name', mais est-ce juste le nom de la fonction de vue, ou le nom de l'url ? J'aimerais donc que cela soit similaire à ce qui est fait dans django-registration, où :
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', (), {})
Ok, maintenant, puis-je appeler directement ma fonction de vue ou dois-je lui fournir une url ? Et plus important encore, à quoi doit ressembler l'appel de ma fonction (et l'url si nécessaire) ? Le backend et les cleaned_data sont juste passés par cette vue pour une utilisation ultérieure. J'ai essayé cela, mais c'est incorrect :
url(r'^link/$', some-view-name)
def some-view-name(request, *args):
En plus de cela :
return redirect('some_url', backend=backend, dataform.cleaned_data)
url(r'^link/$', some-view-name)
def some-view-name(request, backend, data):
encore NoReverseMatch . Mais dans django-registration, j'ai vu quelque chose comme ceci :
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):