Django return HttpResponseRedirect vers une url avec un paramètre
j'ai une situation dans mon projet où je dois faire une redirection de l'utilisateur vers une url contenant un paramètre, (il est déclaré dans le urls.py comme:
url(r'^notamember/(?P<classname>w+)/$',
notamember,
name='notamember'),)
Comment puis-je mettre ce paramètre dans la directive return HttpResponseRedirect? J'ai essayé comme: return HttpResponseRedirect ('/classroom/notamember/classname'),de toute façon, c'est stupide, je sais, je ne peux pas considérer le 'classmane' comme un paramètre. Pour plus de clarté, de mon point de vue est le suivant:
def leave_classroom(request,classname):
theclass = Classroom.objects.get(classname = classname)
u = Membership.objects.filter(classroom=theclass).get(member = request.user).delete()
return HttpResponseRedirect('/classroom/notamember/theclass/')
comment puis-je inclure la variable "theclass" dans cette url? Merci beaucoup!
3 réponses
essaye ceci:
return HttpResponseRedirect('/classroom/notamember/%s/' % classname)
EDIT:
c'est sûrement mieux (réponse de Daniel Roseman):
from django.core.urlresolvers import reverse
url = reverse('notamember', kwargs={'classname': classname})
return HttpResponseRedirect(url)
Cela ne devrait pas être compliqué. L'argument de HttpResponseRedirect
est simplement une chaîne, donc les règles normales pour construire une chaîne s'appliquent ici. Cependant, je ne pense pas que vous voulez le theclass
variable y, car c'est une Classe d'objet, pas une chaîne de caractères. Vous voulez sans doute l' classname
à la place. adamk vous a donné la bonne réponse ici.
Cependant, après avoir dit que vous pouvez simplement utiliser une chaîne de caractères, ce que vous devriez vraiment faire est d'utiliser reverse
fonction. C'est parce que vous pourriez plus tard décidez de changer la structure de L'URL, et plutôt que d'avoir à regarder à travers votre code trouver chaque endroit où vous avez codé dur la chaîne D'URL, vous devriez compter sur les avoir définis en un seul endroit: votre urls.py file. Vous devriez donc faire quelque chose comme ceci:
from django.core.urlresolvers import reverse
url = reverse('notamember', kwargs={'classname': classname})
return HttpResponseRedirect(url)
en Fait, le raccourci redirect
prend les noms de vue et le modèle (qui a get_absolute_url
défini) les noms de trop.
from django.shortcuts import redirect
return redirect(leave_classroom)