2012-05-28 10 views
5

Desidero passare un parametro int (user_id) da una vista di accesso a un'altra vista. È possibile all'interno di un HttpResponseRedirect? Provo qualcosa di simile:Django HttpResponseRedirect con parametro int

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

Mentre il mio urlconf è:

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

Ma io non so se questo è il modo giusto. Eventuali suggerimenti?

+0

Penso che si può usare 'argomento next' di' vista login' ([doc] (https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.views.login)). Sarà il più semplice. – DrTyrsa

risposta

4

Beh, questo non è chiaramente il modo giusto, perché l'URL di creare non corrisponde a quella del vostro urlconf.

il modo corretto per farlo è quello di fare affidamento su Django di farlo per voi. Se si assegna la definizione dell'URL a Nome:

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

quindi è possibile utilizzare django.core.urlresolvers.reverse per generare tale URL con i tuoi argomenti:

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

Nota è meglio usare kwargs piuttosto che args negli URL, ma ho mantenuto come si originariamente

1

Questo è possibile, ma è meglio invertire l'URL e quindi reindirizzare ad esso:

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

È necessario assicurarsi che il vostro conf URL è un parametro denominato in esso (nel mio precedente esempio si tratta di un parametro chiamato user_id.

3

Infine, ho unito le risposte di cui sopra facendo:

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

e

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

e ha funzionato perfettamente.

grazie!

Problemi correlati