我正在使用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.
答案 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)