将数据从 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")
...
请注意,您可能还需要将日期转换为字符串并返回查询,我在这里忽略了这一点。
我最近开始使用 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")
...
请注意,您可能还需要将日期转换为字符串并返回查询,我在这里忽略了这一点。