我的views.py中有一个使用http响应构造的方法
# # content-type of response
response = HttpResponse(content_type='application/ms-excel')
# #decide file name
response['Content-Disposition'] = 'attachment; filename="ThePythonDjango.xls"'
#adding new sheets and data
new_wb = xlwt.Workbook(encoding='utf-8')
new_wb.save(response)
如果我只在回复中有回复,这很好 但是我也想返回一个渲染器
return render(request, 'uploadpage/upload.html', {"excel_data": seller_info, "message":message, "errormessage":errormessage})
我想知道是否有办法做到这一点
答案 0 :(得分:0)
这可以通过使视图在某些查询参数(例如download
参数)的存在下表现不同来完成。实际上,这等效于拥有两个单独的视图:
第一个视图应返回呈现的HTML响应,该响应将自动开始文件下载。例如,通过iframe,只需将以下代码放入模板中即可:
<iframe width="1" height="1" frameborder="0" src="?download"></iframe>
您可以在此处看到其他一些开始自动下载的方法:How to start automatic download of a file in Internet Explorer?
第二个视图应包含您的XLS生成代码,并返回带有XLS内容的HttpResponse。
将其组合为一个视图可能看起来像:
def xls_download_view(request):
if 'download' in request.GET:
response = HttpResponse(content_type='application/ms-excel')
response['Content-Disposition'] = 'attachment; filename="ThePythonDjango.xls"'
new_wb = xlwt.Workbook(encoding='utf-8')
...
new_wb.save(response)
return response
else:
...
return render(...)