解决CSV文件下载
- 响应Content-Type类型需修改为text/csv告诉浏览器是Csv文件,而不是HTML
- 响应会获得一个额外的Content-Disposition标头,其中包含CSV文件的名称。它将被浏览器用于开启“另存为……”对话框
案例
1.视图层
def text_csv(request):
# 模拟输出CSV文件
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment;filename="test.csv"'
# 模拟数据
all_data = ['a', 'b', 'c', 'd']
writer = csv.writer(response)
writer.writerow(all_data)
return response
案例:
页面显示的数据生成CSV,结合分页案例
复制分页视图函数,在其基础上修改
def test_pageout(request):
# 分页视图导出案例
## 方案1 /test_page/num
## 方案2 /test_page?page=num
page_num = request.GET.get('page', 1)
all_data = ['a', 'b', 'c', 'd', 'e']
# 初始化paginatort
paginator = Paginator(all_data, 2)
# 初始化 具体页码的page
c_page = paginator.page(int(page_num))
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment;filename="page-%s.csv"'%(page_num)
writer = csv.writer(response)
for b in c_page:
writer.writerow([b])
return response
修改模板
在body下面添加
<body>
<a href="/make_page_csv?page={{ c_page.number }}">导出本页数据</a>
添加视图路由
urlpatterns = [
path('make_page_csv', views.test_pageout) # 测试分页导出
]
网页效果