Передача информации между представлениями в 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')
Вернуться на верх