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

时间:2016-05-25 09:26:09

标签: django django-views django-urls django-uploads

我正在做一个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 %}
...

现在指向文件的链接类似于: /media/files/2016/05/25/picture.png / media / files / 2016/05/25 / report.pdf

目前,每当我点击链接时,都会找不到404页面。这是因为路径不在 urls.py 中,但由于您通常会在网址中添加视图,因此我不知道如何使用单个文件执行此操作,因为在我看来,一个观点是不必要的。

如何在网址(以及可能在视图中)告诉Django如何获取该文件?我希望能够单击该链接,然后在浏览器中查看图片/ pdf或只是下载文件。

1 个答案:

答案 0 :(得分:3)

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

中的静态文件