16

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

File在模板中,我想为对象生成下载链接。做这个的最好方式是什么?我应该在 django 中使用静态文件处理吗?

蒂亚!

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

4

3 回答 3

15

我不确定您所说的“生成下载链接”到底是什么意思,但要简单地链接到文件,只需将{{ some_file.url }}其用作您的href.

于 2012-08-08T18:54:24.483 回答
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)

(使用relpath方法MEDIA_ROOT从 的值中剥离self.path

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

<a href='{{ MEDIA_URL }}{{ file.relative_path }}'>{{ file.name }}</a>

注意正如克里斯所说,最好在FileField这里使用 a 。以上内容有望适用于您的确切情况,但除非您坚定地致力于以这种方式安排事情,否则我建议您更改为专用领域。

于 2012-08-08T20:27:19.603 回答
5

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

于 2012-08-08T19:13:30.620 回答