Я вижу ряд проблем в вашем коде. Прежде всего, вы должны знать, что redirect
является (по крайней мере, насколько мне известно) запросом GET
. Таким образом, вы отправляете свои данные в первый просмотр с помощью запроса POST
и передаете их с запросом GET
.
Во-вторых, в своем представлении create_test_bills
вы проверяете, чтобы метод запроса был a POST
и затем вы пытаетесь получить параметры GET
. Таким образом, вы никогда не получите здесь свои параметры.
В-третьих, в вашем представлении create_test_bills
вы пытаетесь отобразить pdf независимо от того, является ли запрос POST
или нет. Поскольку перенаправление является запросом GET
, ваш код ниже if request.method == "POST"
не вызывается, и вы получаете сообщение об ошибке.
Чтобы передать параметры, я вижу два подхода. Одним из способов является создание URL-адреса перенаправления в представлении create_form, например:
def create_form(request):
if request.method == 'POST':
range = request.POST.get('range')
results = request.POST.get('results')
unit = request.POST.get('unit')
print(range,results,unit)
url = reverse('test_bills')+'?range=%s&results=%s&unit=%s' % (range, results, unit)
return redirect(url)
return render(request,'form.html',{})
Второй подход заключается в использовании сеансов для хранения данных POST, как описано в этой записи SO, например
def create_form(request):
if request.method == 'POST':
request.session['_my_data'] = request.POST
return redirect('test_bills')
return render(request,'form.html',{})
def create_test_bills(request):
data = request.session.get('_my_data')
pdf = render_to_pdf('invoice.html',{'range':data['range'],'results':data['results'],'unit':data['unit'],})
return HttpResponse(pdf, content_type='application/pdf')