Dans ma fonction de vue je veux appeler une autre vue et transmettre des données à ce:Django redirect retour() avec des paramètres
return redirect('some-view-name', backend, form.cleaned_data)
, où back-end est de l'objet registration.backends et form.cleaned_data est un dict des données de formulaire (mais les deux doivent être envoyés en tant que * args ou ** kwargs pour éviter d'élever l'erreur Don't mix *args and **kwargs in call to reverse()!
). D'après ce que j'ai trouvé dans la documentation:
def my_view(request):
...
return redirect('some-view-name', foo='bar')
On dirait que je dois fournir « une-nom_vue » argument, mais est-ce que le nom de la fonction de vue, ou le nom de l'url ? Je voudrais donc rendre semblable à la façon dont il est fait dans django-enregistrement, 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, je peux appeler la fonction directement ma vue ou dois-je fournir une URL pour cela? Et quoi de plus important, comment mon appel de funciotn (et une url si nécessaire) devrait ressembler? Le backend et clean_data sont simplement passés dans cette vue pour un usage ultérieur. Je l'ai essayé, mais il est incorrect:
url(r'^link/$', some-view-name)
def some-view-name(request, *args):
Outre ceci:
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 l'enregistrement django, 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):
et si je ne vais pas opérer sur clean_data dans cette vue, mais juste le transmettre pour un usage ultérieur? J'ai beaucoup de champs dans la dict_data, donc je voudrais éviter de les passer comme une chaîne de caractères :) – muntu
Je ne comprends pas ce commentaire. Veuillez expliquer plus en détail, en mettant à jour votre question si nécessaire. –
cette deuxième vue stockera uniquement ces données envoyées pour un usage ultérieur. Mais êtes-vous sûr de devoir fournir l'URL pour cela? De docs il semble que je ne fais que l'appel directement à la vue. Aussi j'espérais simplement envoyer un dictionnaire avec le backend et les données dans redirect() (comme cela est fait dans django-registration) puis dans l'url (comme cette fonction dict in register), mais d'après ce que je vois c'est impossible? – muntu