我有一个功能,可以在Django中下载Excel文件:
x= Y.objects.filter(pk__in=ids)
response = HttpResponse(content_type='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename=Test.xlsx'
test_data= WriteFile(x)
response.write(test_data)
return response
我的目标是在此之后显示一条消息:
messages.success(request, 'Success!')
但是我需要在return response
之后重定向,因为如果没有,则该消息不会出现,只有在我手动刷新页面时才会出现。
使用return response
下载文件后,如何使消息显示的任何想法?
答案 0 :(得分:0)
您只能为一个请求返回一个响应,不能同时重定向和返回同一响应中的附件(可能在技术上是合法的-您必须仔细阅读整个HTTP规范以了解-,但是客户端在获得重定向状态代码时肯定会忽略响应正文,至少到目前为止,至少我较新地看到浏览器以其他方式运行),并且“附件”响应确实不会触发重新加载您要访问的页面(服务器无法执行此操作,浏览器也无法执行)。
IOW,如果您真的要刷新页面并下载文件,则至少需要两个视图和一些javascript-第一个视图创建附件并将其存储在某个位置,然后返回带有“成功”消息的html响应,指向第二个视图的链接(带有对附件的引用)以及将触发对此链接的点击的js代码段,第二个视图仅用于附件。
答案 1 :(得分:-1)
您可以不必显示 redirect 来显示消息,
如果不是要直接将test_data
写入响应,而是要渲染一个包含数据的template response,那么还可以在模板响应中包含成功消息。
如果您确实要重定向,则需要:
test_data
存储在持久的内容中,例如磁盘上的文件或数据库记录