Django 表中的可下载文件 link

downloadable file link in django tables

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

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

link列的渲染如下:

    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 文件夹中有一些数据,我希望用户在单击 link 时可以下载这些数据。但是,我无法在 render_download 方法中生成正确的 link。简单地放置 link 它不会启动任何下载,即使它似乎指向正确的文件位置(本地)。另外,我不确定当有人远程连接时这是否有效。我觉得它应该在内部调用一些 reST API 来启动下载,但我不确定如何实现这一点。

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

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

我尝试将 MEDIA_URL 用作 link,但随后它尝试将其与 url 配置和 returns 与:

匹配
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.

我认为你应该得到 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)