我有一个File
模型,它在文件系统中存储path
字段 - 路径。所有文件都存储在MEDIA_ROOT / files
在模板中,我想生成File
对象的下载链接。做这个的最好方式是什么?我应该在django中使用静态文件处理吗?
TIA!
UPD
File
型号
class File(models.Model):
item = models.ForeignKey(Item)
file = models.FileField(upload_to = os.path.join(MEDIA_ROOT,'items'))
format = models.CharField(max_length = 255)
在项目视图中,我执行以下操作:
files = File.objects.filter(item_id = id)
并将files
传递给模板
在模板中我使用files.1.file.url
作为示例,但仍有错误的网址,例如site.com/home/dizpers/...
UPD2
解决方案
我的问题出现在file
字段的文件模型中。在upload_to参数中,我使用绝对路径,但必须使用相对路径:
file = models.FileField(upload_to = 'items')
答案 0 :(得分:12)
我不确定“生成下载链接”究竟是什么意思,但只需链接到该文件,只需使用{{ some_file.url }}
作为href
。
答案 1 :(得分:6)
在models.py
:
import os
from django.conf import settings
from django.db import models
class File(models.Model):
... (your existing File model)
@property
def relative_path(self):
return os.path.relpath(self.path, settings.MEDIA_ROOT)
(使用the relpath
method从MEDIA_ROOT
的值中删除self.path
在file_detail.html
(或同等)模板中:
<a href='{{ MEDIA_URL }}{{ file.relative_path }}'>{{ file.name }}</a>
克里斯说, NB ,最好在这里使用FileField
。上述内容有望适用于您的具体情况,但除非您非常致力于以这种方式安排事情,否则我建议您转到专用领域。
答案 2 :(得分:4)
尝试使用href="{{ STATIC_URL }}/files/somefile"
或href="{{ MEDIA_URL }}/files/somefile"
添加用户上传的内容