Эта строка
return HttpResponseRedirect(reverse('reg.views.thanks', args=(id,)))
Пытается создать URL для вашего представления reg.views.thanks
, в качестве параметра используется переменная id
.
Эта строка в urls.py
url(r'^thanks/$', 'reg.views.thanks'),
Нет места для этого параметра.
Первое, что вам нужно выяснить, это то, действительно ли вы хотите отправить HTTP-перенаправление в браузер, чтобы он сказал перейти на страницу «Спасибо». Если это действительно так, то вам нужен способ отправить этот идентификатор в URL. Вы можете сделать это как часть самого URL-пути, как предлагает @moguzalp, или вы можете поместить его в строку запроса, например
/thanks/?id=12345
Или вы можете делать другие вещи, например, сохранять идентификатор в сеансе пользователя и извлекать его, когда они запрашивают страницу благодарности. Хотя это немного сложнее.
Если вам на самом деле не нужно выдавать HTTP-перенаправление, то ничто не мешает вам просто вызвать функцию thanks () из вашей функции представления, например:
def registration(request):
if request.method == 'POST':
form = registrationform(request.POST)
if form.is_valid():
data = form.save()
id = data.id
return thanks(request, id)
else:
form = registrationform()
return render_to_response('registration.html', {'form' : form}, context_instance=RequestContext(request))
URL-адрес не изменится в браузере, но будет использоваться правильный идентификатор, и его не нужно нигде отображать в URL-адресе, параметрах запроса или сеансе