django表中的可下载文件链接

时间:2017-02-27 11:09:05

标签: python django django-templates django-views django-tables2

我正在使用django-tables2并且有一个基本上应该允许用户访问数据存储的视图。我的表模型有一个链接列如下:

class DummyTable(tables.Table):
    download = tables.LinkColumn('dummy_download', args=[tables.A('pk')], orderable=False,
                                 empty_values=(), verbose_name='')

链接列的呈现完成如下:

    class Meta:
        model = DummyModel
        attrs = {'class': 'paleblue'}   


    def render_download(self):        
        url = static('cloud-download.png')
        media_root = settings.MEDIA_ROOT
        href = media_root + "/mask.nii.gz"        
        return mark_safe('<a href="' + href + '"><img src="' + url + '"></a>')

所以基本上我的/media文件夹中有一些数据,我想让用户在点击链接时下载。但是,我无法在render_download方法中生成正确的链接。简单地按照我的方式放置链接即使它似乎指向正确的文件位置(本地)也不会启动任何下载。此外,我不确定当有人远程连接时这是否会起作用。我觉得它应该在内部调用一些reST API来启动下载,但我不知道如何实现这一点。

settings.py文件配置media设置如下:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/' 

我尝试使用MEDIA_URL作为链接,但之后尝试将其与网址配置匹配并返回:

Using the URLconf defined in cloud.urls, Django tried these URL patterns, in this order:

^admin/
^$ [name='index']
^login/$ [name='login']
^logout/$ [name='logout']
^images/$ [name='images']
^static\/(?P<path>.*)$
The current URL, media/mask.nii.gz, didn't match any of these.

1 个答案:

答案 0 :(得分:1)

我认为您应该获得MEDIA_URL而不是MEDIA_ROOT的价值:

def render_download(self):        
    url = static('cloud-download.png')
    href = settings.MEDIA_URL + "/mask.nii.gz"        
    return mark_safe('<a href="' + href + '"><img src="' + url + '"></a>')

您可能需要将以下内容添加到主urls.py,以便开发Web服务器可以提供您的媒体文件。

# urls.py

...
from django.conf import settings
from django.conf.urls.static import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns

urlpatterns = [
    # ...your routes...
] 

urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)