En mi función de vista, quiero llamar a otra vista y pasarle datos:
return redirect('some-view-name', backend, form.cleaned_data)
, donde backend es del objeto registration.backends, y form.cleaned_data es un dictado de datos de formulario (pero ambos deben enviarse como * args o ** kwargs para evitar generar Don't mix *args and **kwargs in call to reverse()!
errores). De lo que encontré en los documentos:
def my_view(request):
...
return redirect('some-view-name', foo='bar')
Parece que necesito proporcionar el argumento 'some-view-name', pero ¿es solo el nombre de la función de vista o el nombre de la URL? Así que me gustaría hacerlo similar a la forma en que se hace en django-registration, donde:
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, ahora, ¿puedo llamar directamente a mi función de vista o necesito proporcionar una URL para ello? ¿Y qué es más importante, cómo debería verse mi llamada de función (y una URL si es necesario)? Tanto el backend como los clean_data se pasan a través de esta vista para un uso posterior. He intentado esto, pero es incorrecto:
url(r'^link/$', some-view-name)
def some-view-name(request, *args):
Tan bien como esto :
return redirect('some_url', backend=backend, dataform.cleaned_data)
url(r'^link/$', some-view-name)
def some-view-name(request, backend, data):
todavía NoReverseMatch. Pero en el registro de django, he visto algo como esto:
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):