如何显示页面并开始在django中下载文件?

时间:2019-10-24 16:50:34

标签: python django

我的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})

我想知道是否有办法做到这一点

1 个答案:

答案 0 :(得分:0)

这可以通过使视图在某些查询参数(例如download参数)的存在下表现不同来完成。实际上,这等效于拥有两个单独的视图:

  1. 第一个视图应返回呈现的HTML响应,该响应将自动开始文件下载。例如,通过iframe,只需将以下代码放入模板中即可:

    <iframe width="1" height="1" frameborder="0" src="?download"></iframe>
    

    您可以在此处看到其他一些开始自动下载的方法:How to start automatic download of a file in Internet Explorer?

  2. 第二个视图应包含您的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(...)