将数据从 post 表单传递到 FileResponde 视图

Passing data from post form to FileResponde view

我最近开始使用 Django,我设法创建了两个视图,一个用于提交表单,另一个用于 return 一个 FileResponse,单独使用,它们工作正常。

现在,我需要整合两者,当客户提交表单时,我想使用在前一个表单中提交的字段重定向到另一个视图。我该怎么做?

这是我的表单视图:

def submitForm(request):
    
    if 'report' in request.POST:
        
        date_start = request.POST.get('date_start')
        date_end = request.POST.get('date_end')
        state = request.POST.get('state')
    
    return render(request, 'comissao.html')

这是我创建 pdf 文件的视图

def createPdf(request):

    date_start = '20220301'
    date_end = '20220331'
    state = 'G00471'
    
    body = "some html"
    options = { 'quiet': '' }
    pdfkit.from_string(body, options=options)

    file = open('file.pdf', 'rb')
    
    return FileResponse(file)

如您所见,我需要在第一个视图中传递的信息,以便在第二个视图中使用,我尝试过类似的方法,但我认为我误解了这个概念,

return reverse('pdf', kwargs={'state':state, 'date_start':date_start, 'date_end':date_end})

reverse() 只有 returns URL,但我认为你更想对那个视图做一个 redirect()

要传递参数,您有多种选择:

  • 获取参数
  • 会话
  • URL 参数

让我们使用 GET 参数,我建议:

from urllib.parse import urlencode

...
def submitForm(request):
    ...
    response = redirect('pdf')
    params = { state' : state, 'date_start: date_start, 'date_end': date_end}
    response['Location'] += f'?{urlencode(params)}'
    return response

然后在您的 PDF 视图中您需要解析 GET 参数:

def createPdf(request):
    date_start = request.GET.get("date_start")
    ...

请注意,您可能还需要将日期转换为字符串并返回查询,我在这里忽略了这一点。