parametros - Django devuelve HttpResponseRedirect a una url con un parámetro
httpresponseredirect reverse (3)
Tengo una situación en mi proyecto en la que necesito hacer una redirección del usuario a una url que contiene un parámetro, (está declarado en urls.py como:
url(r''^notamember/(?P<classname>/w+)/$'',
notamember,
name=''notamember''),)
¿Cómo puedo poner ese parámetro en la declaración HttpResponseRedirect? Intenté como: devuelve HttpResponseRedirect (''/ classroom / notamember / classname''), de todos modos, esto es una tontería, lo sé, no puedo considerar el ''classmane'' como un parámetro. Para mayor claridad, mi punto de vista es:
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/'')
¿Cómo puedo incluir la variable ''theclass'' en esa url? ¡Muchas gracias!
En realidad, la redirect
acceso directo toma los nombres de vista y el modelo (que también tiene los nombres get_absolute_url
defined).
from django.shortcuts import redirect
return redirect(leave_classroom)
Esto no debería ser complicado. El argumento para HttpResponseRedirect
es simplemente una cadena, por lo que las reglas normales para construir una cadena se aplican aquí. Sin embargo, no creo que quiera la variable de theclass
allí, ya que es un objeto ClassRoom, no una cadena. Es de suponer que quieres el nombre de classname
. adamk te ha dado la respuesta correcta aquí.
Sin embargo, una vez dicho esto, puede usar una cadena, lo que realmente debería hacer es usar la función reverse
. Esto se debe a que luego puede decidir cambiar la estructura de la URL y, en lugar de tener que buscar en el código para encontrar cada lugar en el que ha codificado la cadena URL, debe confiar en que los ha definido en un solo lugar: sus URL. archivo py Entonces deberías hacer algo como esto:
from django.core.urlresolvers import reverse
url = reverse(''notamember'', kwargs={''classname'': classname})
return HttpResponseRedirect(url)
Prueba esto:
return HttpResponseRedirect(''/classroom/notamember/%s/'' % classname)
EDITAR:
Esto es seguramente mejor (respuesta de Daniel Roseman):
from django.core.urlresolvers import reverse
url = reverse(''notamember'', kwargs={''classname'': classname})
return HttpResponseRedirect(url)