У меня есть ситуация в моем проекте, где я должен сделать перенаправление пользователя к URL, содержащему параметр, (он объявляется в urls.py как:
url(r'^notamember/(?P<classname>\w+)/$',
notamember,
name='notamember'),)
Как я могу поместить тот параметр в возврат HttpResponseRedirect? Я попробовал как: возвратите HttpResponseRedirect ('/classroom/notamember/classname'), так или иначе, это глупо, я знаю, я не могу рассмотреть 'classmane' в качестве параметра. Для ясности мое представление:
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/')
как я могу включать переменную 'theclass' в тот URL?Большое спасибо!
Попробуйте следующее:
return HttpResponseRedirect('/classroom/notamember/%s/' % classname)
РЕДАКТИРОВАТЬ:
Это определенно лучше (ответ Дэниела Роземана):
from django.core.urlresolvers import reverse
url = reverse('notamember', kwargs={'classname': classname})
return HttpResponseRedirect(url)
Фактически, ярлык redirect
принимает имена представлений и модель (для которой определены имена get_absolute_url
).
from django.shortcuts import redirect
return redirect(leave_classroom)
Это не должно быть сложным. Аргумент HttpResponseRedirect
- это просто строка, поэтому здесь применимы обычные правила построения строки. Однако я не думаю, что вам нужна переменная theclass
, поскольку это объект ClassRoom, а не строка. Предположительно, вам нужна classname
. adamk дал вам правильный ответ здесь.
Однако, сказав, что вы можете просто использовать строку, на самом деле вам следует использовать функцию reverse
. Это связано с тем, что позже вы можете решить изменить структуру URL, и вместо того, чтобы просматривать свой код в поисках каждого места, где вы жестко закодировали строку URL, вы должны полагаться на то, что они определены в одном единственном месте: в вашем файле urls.py. Таким образом, вы должны сделать примерно следующее:
from django.core.urlresolvers import reverse
url = reverse('notamember', kwargs={'classname': classname})
return HttpResponseRedirect(url)