2012-05-28 49 views
5

Quiero pasar un parámetro int (user_id) de una vista de inicio de sesión a otra vista. ¿Es eso posible dentro de un HttpResponseRedirect? Intento algo como esto:Django HttpResponseRedirect con el parámetro int

return HttpResponseRedirect("/profile/?user_id=user.id") 

Mientras mi URLconf es:

(r'^profile/(?P<user_id>\d+)/$', '...') 

Pero no sé si esa es la manera correcta. ¿Alguna sugerencia?

+0

Creo que puede usar el argumento 'next' de' login' view ([docs] (https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.views.login)). Será el más simple. – DrTyrsa

Respuesta

4

Bueno, eso no es claramente el camino correcto, ya que la URL se crea no coincide con el de su URLconf.

la forma correcta de hacer esto es confiar en Django para que lo haga por usted. Si le das una definición de URL Nombre:

urlpatterns += patterns('', 
    url(r'^profile/(?P\d+)/$', ' ...', name='profile'), 
) 

continuación, puede utilizar django.core.urlresolvers.reverse para generar esa URL con sus argumentos:

redirect_url = reverse('profile', args=[user.id]) 
return HttpResponseRedirect(redirect_url) 

Nota que es mejor utilizar kwargs en lugar de argumentos en sus URL, pero me he mantenido como usted tenía originalmente

1

Eso es posible, pero es mejor para invertir la dirección URL y luego redirigir a la misma:

url = reverse('name_of_url', kwargs={ 'user_id': user.id }) 
return HttpResponseRedirect(url) 

Usted debe asegurarse de que su conf URL tiene un parámetro denominado en ella (en el ejemplo anterior es un parámetro llamado user_id.

3

Por último, he combinado las respuestas anteriores haciendo:

url = reverse('profile', kwargs={ 'user_id': user.id }) 
return HttpResponseRedirect(url) 

y

url(r'^profile/(?P<user_id>\d+)/$', '...', name='profile') 

y funcionó perfectamente.

gracias!

Cuestiones relacionadas