如何将文件从 Django 中的文件字段添加到 url 和视图?

How to add a file from a filefield in Django to urls and views?

我正在做一个 Django 项目,我有一个名为 Projects 的模型,在这个模型中我有一个 FileField,其中文件上传到 /media/files/YEAR/MONTH/DATE/。

settings.py:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

models.py:

class Project(models.Model):
    ...
    file_upload = models.FileField(upload_to='files/%Y/%m/%d', max_length=100, null=True, blank=True, default='')

模板:

...
{% if project.file_upload %}
<tr>
  <td>File</td>
  <td><a href="{{ project.file_upload.url }}">{{ project.file_upload.name }} (Size: {{ project.file_upload.size|filesizeformat }})</a></td>
</tr>
{% endif %}
...

现在 link 到一个文件会是这样的:/media/files/2016/05/25/picture.png/media/files/2016/05/25/report.pdf

目前,每当我单击 link 时,都会收到 404 页面未找到的提示。那当然是因为路径不在urls.py,但是因为你通常添加视图到url,我不知道你会怎么做它只有一个文件,因为在我看来不需要视图。

如何在 url 中(可能在视图中)告诉 Django 如何获取该文件?我希望能够单击 link,然后在浏览器中查看 picture/pdf 或直接下载文件。

Django 不提供静态文件。要在 DEBUG=True 时强制提供这些文件,请将此代码添加到 urls.py:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

(来自 https://docs.djangoproject.com/en/1.9/howto/static-files/#serving-static-files-during-development

你不需要告诉 Django 关于 views.py

中的静态文件