Возврат Django HttpResponseRedirect к URL с параметром

У меня есть ситуация в моем проекте, где я должен сделать перенаправление пользователя к 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?Большое спасибо!

31
задан dana 29 June 2010 в 10:57
поделиться

3 ответа

Попробуйте следующее:

return HttpResponseRedirect('/classroom/notamember/%s/' % classname)

РЕДАКТИРОВАТЬ:

Это определенно лучше (ответ Дэниела Роземана):

from django.core.urlresolvers import reverse

url = reverse('notamember', kwargs={'classname': classname})
return HttpResponseRedirect(url)
43
ответ дан 27 November 2019 в 21:32
поделиться

Фактически, ярлык redirect принимает имена представлений и модель (для которой определены имена get_absolute_url ).

from django.shortcuts import redirect

return redirect(leave_classroom)
4
ответ дан 27 November 2019 в 21:32
поделиться

Это не должно быть сложным. Аргумент 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)
52
ответ дан 27 November 2019 в 21:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: