with parametros not name httpresponseredirect example con django url httpresponse urlvariables

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)