使用Django下载文件

时间:2017-04-16 20:36:09

标签: python django

这可能是一个简单的问题,但我不知何故找不到解决方案。 Django提供了很多关于上传文件的信息,但是如何下载文件呢。

假设我们在uploads/something.txt上有一个HTML按钮作为文件。

我尝试使用django.views.static.serve,但这样做会在网页上打开一个文件。

我的问题很简单:我们网站的用户下载文件的最佳和最pythonic方式是什么?

3 个答案:

答案 0 :(得分:2)

  • 您需要阅读该文件。
  • 使用HttpResponse和适当的内容类型提供服务。

以下是一些示例代码:

content = open("uploads/something.txt").read()
return HttpResponse(content, content_type='text/plain')

这应该提供一个文本文件。

但正如您所描述的,在某些浏览器上,它不会要求下载文件,而是会在浏览器中显示它。如果要显示下载提示,请使用以下命令:

response = HttpResponse(open("uploads/something.txt", 'rb').read())
response['Content-Type'] = 'text/plain'
response['Content-Disposition'] = 'attachment; filename=DownloadedText.txt'
return response

但请注意,通过nginx或您选择的反向代理提供静态内容或上传文件可能更好。通过Django发送大文件可能不是最佳的方式。

答案 1 :(得分:0)

onDestroy

答案 2 :(得分:0)

也许有点晚了,但这是我的解决方法:

def render(self, value):
        return format_html('<a href="/media/{0}" download>{0}</a>', value)