Django:生成下载链接

Dmi*_*sev 13 django download

我有一个File模型,它存储path文件系统中的字段 - 文件路径.所有文件都存储在MEDIA_ROOT /文件中

在模板中我想生成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)
Run Code Online (Sandbox Code Playgroud)

在项目视图中,我执行以下操作:

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')

Chr*_*att 12

我不知道究竟你的意思是"生成下载链接",而是简单地链接到的文件,只需使用{{ some_file.url }}作为你的href.


sup*_*cuo 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)
Run Code Online (Sandbox Code Playgroud)

(使用从值中剥离relpath方法)MEDIA_ROOTself.path

在您的file_detail.html(或等效的)模板中:

<a href='{{ MEDIA_URL }}{{ file.relative_path }}'>{{ file.name }}</a>
Run Code Online (Sandbox Code Playgroud)

NB说,克里斯说,最好在FileField这里使用.上述内容有望适用于您的具体情况,但除非您非常致力于以这种方式安排事情,否则我建议您转到专用领域.


Cin*_*der 5

尝试使用href="{{ STATIC_URL }}/files/somefile", 或href="{{ MEDIA_URL }}/files/somefile"对于用户上传的内容