这可能是一个简单的问题,但我不知何故找不到解决方案。 Django提供了很多关于上传文件的信息,但是如何下载文件呢。
假设我们在uploads/something.txt
上有一个HTML按钮作为文件。
我尝试使用django.views.static.serve
,但这样做会在网页上打开一个文件。
我的问题很简单:我们网站的用户下载文件的最佳和最pythonic方式是什么?
答案 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)