2012-05-28 4 views
5

Ich möchte einen int-Parameter (user_id) von einer Login-Ansicht zu einer anderen Ansicht übergeben. Ist das in einem HttpResponseRedirect möglich? Ich versuche, so etwas wie dieses:Django HttpResponseRedirect mit Int-Parameter

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

Während mein URLconf ist:

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

Aber ich weiß nicht, ob das der richtige Weg ist. Irgendwelche Vorschläge?

+0

Ich denke, Sie können 'nächste' Argument von' Login' Ansicht ([docs] (https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.views.login)). Es wird das Einfachste sein. – DrTyrsa

Antwort

4

Nun, das ist eindeutig nicht der richtige Weg, weil die URL Sie schaffen nicht die in Ihrem URLconf entspricht.

der richtige Weg, dies zu tun, ist auf Django verlassen es für Sie zu tun. Wenn Sie Ihre URL-Definition angeben a Name:

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

dann können Sie django.core.urlresolvers.reverse verwenden Sie diese URL mit Argumenten zu generieren:

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

Hinweis, es ist besser kwargs zu verwenden, anstatt args in Ihren URLs, aber ich habe es, wie Sie gehalten hatte ursprünglich.

1

Das ist möglich, aber es ist besser, die URL umzukehren und dann, um es zu umleiten:

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

Sie sollten sicherstellen, dass Ihre URL conf ein benannter Parameter in ihm hat (in meinem obigen Beispiel ist es ein Parameter aufgerufen user_id.

3

Schließlich kombiniert ich die oben genannten Antworten, indem Sie:

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

und

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

und es funktionierte perfekt.

danke!