生成多个文档(Python TempFile 模块)
Generating Multiple Documents (Python TempFile Module)
我目前正在尝试使用我的网络应用程序打印财务报告 - 这需要通过单击按钮来实现。但是,当我单击该按钮时,该应用程序仅打印 1 个文档(第一个)我不明白这可能是什么,因为每个 if 语句有 2 个不同的 returns 重定向到 2 个不同的。 HTML 页
这是我目前尝试过的:
import tempfile
def printReports(request , reports_pk):
pkForm = get_object_or_404(SettingsClass , pk=reports_pk)
complexName = pkForm.Complex
if pkForm.Trial_balance_Year_To_Date == True:
### Printing Trial Balance PDF
response = HttpResponse(content_type= 'application/pdf')
response['Content-Disposition']= 'attachment; filename=TrialBalance' + \
str(datetime.now()) + '.pdf'
response['Content-Transfer-Encoding'] = 'binary'
content = {"x_AlltrbYTD":x_AlltrbYTD , 'xCreditTotal':xCreditTotal , 'xDebitTotal':xDebitTotal , 'complexName':complexName , 'openingBalances': openingBalances ,'printZero':printZero , 'printDesc':printDesc , 'printAcc':printAcc}
html_string=render_to_string('main/reports/trialBalanceYear.html' , content)
html=HTML(string=html_string)
result=html.write_pdf()
with tempfile.NamedTemporaryFile(delete=True) as output:
output.write(result)
output.flush()
output.seek(0)
response.write(output.read())
return response
if pkForm.Trial_balance_Monthly == True:
### Printing Trial Balance PDF
response = HttpResponse(content_type= 'application/pdf')
response['Content-Disposition']= 'attachment; filename=TrialBalanceMonthly' + \
str(datetime.now()) + '.pdf'
response['Content-Transfer-Encoding'] = 'binary'
content = {"xtrbMonth":xtrbMonth , 'xCreditTotalM':xCreditTotalM , 'xDebitTotalM':xDebitTotalM , 'complexName':complexName , 'printZeroM':printZeroM}
html_string=render_to_string('main/reports/trialBalanceMonthly.html' , content)
html=HTML(string=html_string)
result=html.write_pdf()
with tempfile.NamedTemporaryFile(delete=True) as output:
output.write(result)
output.flush()
output.seek(0)
response.write(output.read())
else:
printTrialBalanceMonth = False
程序只打印第一个 if 语句显示的内容,不打印第二个 .pdf 文档。有谁知道这可能是什么原因造成的?
您正在第一个 if
块中使用 return
。
Django 生成一个响应,return 下面的代码永远不会运行(顺便说一句,它 return 什么都没有,所以即使 pkForm.Trial_balance_Monthly == True
你也不会得到响应。
现代 IDE,例如 Pycharm 会在此处显示彩色警告,但如果您不使用此类 IDE,则可以使用调试器跟踪代码中发生的情况.
要进行您所描述的交互(只有一个按钮和 2 个报告),您需要:
- 为 2 个报告创建 2 个不同的端点
- 编写 JS 处理程序来监听按钮的点击并调用 2 个 enpoints。照常处理回复。
替代方案:
制作一个包含两个报告的临时 zip 文件,并创建一个仅包含一个 zip 文件的响应。
每个 OS 都有解压缩功能,因此您的用户会发现这非常直观。这是压缩文件 documentation
我目前正在尝试使用我的网络应用程序打印财务报告 - 这需要通过单击按钮来实现。但是,当我单击该按钮时,该应用程序仅打印 1 个文档(第一个)我不明白这可能是什么,因为每个 if 语句有 2 个不同的 returns 重定向到 2 个不同的。 HTML 页
这是我目前尝试过的:
import tempfile
def printReports(request , reports_pk):
pkForm = get_object_or_404(SettingsClass , pk=reports_pk)
complexName = pkForm.Complex
if pkForm.Trial_balance_Year_To_Date == True:
### Printing Trial Balance PDF
response = HttpResponse(content_type= 'application/pdf')
response['Content-Disposition']= 'attachment; filename=TrialBalance' + \
str(datetime.now()) + '.pdf'
response['Content-Transfer-Encoding'] = 'binary'
content = {"x_AlltrbYTD":x_AlltrbYTD , 'xCreditTotal':xCreditTotal , 'xDebitTotal':xDebitTotal , 'complexName':complexName , 'openingBalances': openingBalances ,'printZero':printZero , 'printDesc':printDesc , 'printAcc':printAcc}
html_string=render_to_string('main/reports/trialBalanceYear.html' , content)
html=HTML(string=html_string)
result=html.write_pdf()
with tempfile.NamedTemporaryFile(delete=True) as output:
output.write(result)
output.flush()
output.seek(0)
response.write(output.read())
return response
if pkForm.Trial_balance_Monthly == True:
### Printing Trial Balance PDF
response = HttpResponse(content_type= 'application/pdf')
response['Content-Disposition']= 'attachment; filename=TrialBalanceMonthly' + \
str(datetime.now()) + '.pdf'
response['Content-Transfer-Encoding'] = 'binary'
content = {"xtrbMonth":xtrbMonth , 'xCreditTotalM':xCreditTotalM , 'xDebitTotalM':xDebitTotalM , 'complexName':complexName , 'printZeroM':printZeroM}
html_string=render_to_string('main/reports/trialBalanceMonthly.html' , content)
html=HTML(string=html_string)
result=html.write_pdf()
with tempfile.NamedTemporaryFile(delete=True) as output:
output.write(result)
output.flush()
output.seek(0)
response.write(output.read())
else:
printTrialBalanceMonth = False
程序只打印第一个 if 语句显示的内容,不打印第二个 .pdf 文档。有谁知道这可能是什么原因造成的?
您正在第一个 if
块中使用 return
。
Django 生成一个响应,return 下面的代码永远不会运行(顺便说一句,它 return 什么都没有,所以即使 pkForm.Trial_balance_Monthly == True
你也不会得到响应。
现代 IDE,例如 Pycharm 会在此处显示彩色警告,但如果您不使用此类 IDE,则可以使用调试器跟踪代码中发生的情况.
要进行您所描述的交互(只有一个按钮和 2 个报告),您需要:
- 为 2 个报告创建 2 个不同的端点
- 编写 JS 处理程序来监听按钮的点击并调用 2 个 enpoints。照常处理回复。
替代方案:
制作一个包含两个报告的临时 zip 文件,并创建一个仅包含一个 zip 文件的响应。 每个 OS 都有解压缩功能,因此您的用户会发现这非常直观。这是压缩文件 documentation