首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django -供下载的文件

Django -供下载的文件
EN

Stack Overflow用户
提问于 2017-04-25 12:29:13
回答 1查看 1.8K关注 0票数 0

我有一个文档集合(.pptx文件),我希望提供给用户下载。我正利用django来达到这个目的。我用这些链接找出了一些部件:

有-django-服务-可下载-文件

我面临的问题是连接这些部分。相关代码片段-

settings.py文件

代码语言:javascript
复制
MEDIA_ROOT = PROJECT_DIR.parent.child('media')
MEDIA_URL = '/media/'

html模板。变量slide_loc具有文件位置(例如:path/to/file/filename.pptx)

代码语言:javascript
复制
<div class = 'project_data slide_loc'>
<a href = "{{ MEDIA_URL }}{{ slide_loc }}">Download </a>
</div>

views.py文件

代码语言:javascript
复制
def doc_dwnldr(request, file_path, original_filename):
    fp = open(file_path, 'rb')
    response = HttpResponse(fp.read())
    fp.close()
    type, encoding = mimetypes.guess_type(original_filename)
    if type is None:
        type = 'application/octet-stream'
    response['Content-Type'] = type
    response['Content-Length'] = str(os.stat(file_path).st_size)
    if encoding is not None:
        response['Content-Encoding'] = encoding

    # To inspect details for the below code, see http://greenbytes.de/tech/tc2231/
    if u'WebKit' in request.META['HTTP_USER_AGENT']:
        # Safari 3.0 and Chrome 2.0 accepts UTF-8 encoded string directly.
        filename_header = 'filename=%s' % original_filename.encode('utf-8')
    elif u'MSIE' in request.META['HTTP_USER_AGENT']:
        # IE does not support internationalized filename at all.
        # It can only recognize internationalized URL, so we do the trick via routing rules.
        filename_header = ''
    else:
        # For others like Firefox, we follow RFC2231 (encoding extension in HTTP headers).
        filename_header = 'filename*=UTF-8\'\'%s' % urllib.quote(original_filename.encode('utf-8'))
    response['Content-Disposition'] = 'attachment; ' + filename_header
    return response

urls.py文件

代码语言:javascript
复制
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL,
                          document_root=settings.MEDIA_ROOT)

我要寻找的详细信息是:当用户单击“下载”按钮时,如何映射views.py文件中的url和views.py函数?

EN

回答 1

Stack Overflow用户

发布于 2017-04-25 13:53:18

urls中,您需要创建如下内容:

代码语言:javascript
复制
url(r'^(?P<file_path>\w+)/(?P<original_filename>\w+)/$', views.doc_dwnldr, name='doc_dwnldr')

这将映射到您在模板中单击链接时所拥有的函数。

然后在模板中执行如下操作:

代码语言:javascript
复制
<a href="{% url 'doc_dwnldr' file_path='file_path_variable_here', original_filename='filename_variable_here' %}">Download </a>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43610696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档