Передача информации между представлениями в DJANGO
Итак, у меня есть два представления, одно используется для отображения информации, а другое возвращает файл-ответчик. Я пытаюсь загрузить файл pdf, используя информацию из первого представления:
@login_required()
def detail(request, location_name):
if request.method == "POST":
return search_in_employees(request)
current = CurrentInfo()
pdf_data = current.detail_employees_by_location(location_name) # this gives me the list of people
context = {
'present': current.detail_employees_by_location(location_name),
'location': location_name,
}
print('Data: -------------->', pdf_data)
return render(request, 'user_area/detail.html', context)
а мой второй вариант просто форматирует его как pdf:
@login_required()
def download_pdf(request):
buf = io.BytesIO()
canv = canvas.Canvas(buf, pagesize=letter, bottomup=0)
textob = canv.beginText()
textob.setTextOrigin(inch, inch)
textob.setFont("Helvetica", 14)
lines = [
"Line 1 ",
"Line 2 ",
"Line 3 ",
"Line 4 ",
]
for line in lines:
textob.textLine(line)
canv.drawText(textob)
canv.showPage()
canv.save()
buf.seek(0)
return FileResponse(buf, as_attachment=True, filename='employees.pdf')
Сейчас PDF файл содержит только фиктивные данные, но как я могу передать pdf_data из первого представления во второе?
Я бы предложил создать функцию либо внутри вашего файла views.py, либо внутри файла helpers.py в вашем модуле:
def get_pdf_data(location_name):
current = CurrentInfo()
pdf_data = current.detail_employees_by_location(location_name)
return pdf_data
Тогда ваш первый вид будет выглядеть так:
@login_required()
def detail(request, location_name):
if request.method == "POST":
return search_in_employees(request)
pdf_data = get_pdf_data(location_name)
context = {
'present': pdf_data,
'location': location_name,
}
print('Data: -------------->', pdf_data)
return render(request, 'user_area/detail.html', context)
И ваше второе представление может использовать эту новую функцию но только если вы посылаете имя_местоположения в представление, такое же, как и первое представление
@login_required()
def download_pdf(request, location_name):
pdf_data = get_pdf_data(location_name)
buf = io.BytesIO()
canv = canvas.Canvas(buf, pagesize=letter, bottomup=0)
textob = canv.beginText()
textob.setTextOrigin(inch, inch)
textob.setFont("Helvetica", 14)
for line in pdf_data:
textob.textLine(line)
canv.drawText(textob)
canv.showPage()
canv.save()
buf.seek(0)
return FileResponse(buf, as_attachment=True, filename='employees.pdf')