Django:生成下载链接

时间:2012-08-08 18:45:59

标签: django download

我有一个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

Related question

解决方案

我的问题出现在file字段的文件模型中。在upload_to参数中,我使用绝对路径,但必须使用相对路径:

file = models.FileField(upload_to = 'items')

3 个答案:

答案 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 methodMEDIA_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"添加用户上传的内容

相关问题