我当前的网站根据当前用户的输入/信息创建Docx文件并将其保存到服务器。我将程序保存到服务器,以便用户以后可以访问它。所以我假设docx文件可以被认为是静态的?好吧无论如何,我无法让下载工作。
我已经看了很多关于如何让Docx下载的不同主题,到目前为止还没有一个对我有用。 1. Downloadable docx file in Django 2. Django create .odt or .docx documents to download Generate the MS word document in django
我得到的最接近的是下载的docx文件,但内容是路径,而不是我想要的实际docx文件。希望有人可以提供帮助,谢谢。
代码:
response = HttpResponse('docx_temps/extracted3/test.docx', content_type='application/vnd')
response['Content-Disposition'] = 'attachment; filename=test.doc'
return response
链接代码,仍然无法使其工作。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Download</title>
</head>
<body>
<a href="users/Tyler/Desktop/Django_Formatically/mysite/Formatically/docx_temps/extracted3/test.docx"
download="Test.docx">
Test.docx
</a>
</body>
</html>
答案 0 :(得分:0)
为了能够下载被视为 static 的文件,必须以某种方式提供它。在生产环境中,此任务可能由Apache或nginx等Web服务器处理。
要通过Django开发服务器为您的媒体提供服务,您可以将以下模式添加到urls.py
:
# urls.py
if settings.DEBUG:
urlpatterns = patterns('',
(r'^media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
(r'', include('django.contrib.staticfiles.urls')),
) + urlpatterns
因此,/media/
以下的任何路径都将直接投放。您还必须确保在设置中正确设置MEDIA_ROOT
和MEDIA_URL
:
# settings.py
MEDIA_ROOT = 'Users/Tyler/Desktop/Django_Formatically/mysite/media/'
MEDIA_URL = '/media/'
然而 - 这种方法不允许您在Django级别上进行交互。所以你不能,例如检查Django中的用户权限或跟踪/日志请求。知道文件URL的每个用户都可以访问它。
# views.py
def file_view(request):
filename = '<path to your file>'
data = open(filename, "rb").read()
response = HttpResponse(data, content_type='application/vnd')
response['Content-Length'] = os.path.getsize(filename)
return response
这只是最简单的方法,有一些缺点。整个文件内容是在python中加载的 - 因此在发送大文件和拥有大量请求时效率不高。可以在此处找到使用FileWrapper
的解决方案:Serving large files ( with high loads ) in Django
或者您可以使用django-sendfile,以便轻松使用Apache mod_xsendfile或nginx XSendfile。