【问题标题】:How to add a file from a filefield in Django to urls and views?如何将文件从 Django 中的文件字段添加到 url 和视图?
【发布时间】:2016-09-22 19:24:04
【问题描述】:

我正在做一个 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/报告.pdf

目前,每当我单击该链接时,我都找不到 404 页面。那当然是因为路径不在 urls.py 中,但是由于您通常会向 url 添加视图,所以我不知道您将如何处理单个文件,因为它会在我看来,观点是不必要的。

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

【问题讨论】:

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


    【解决方案1】:

    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中的静态文件

    【讨论】:

    • 谢谢,当我使用将您的代码更改为 media_url 和 media_root 时,它起作用了。我希望有更好的方法来做到这一点。但我想这将不得不这样做。这将如何与 Debug=False 一起工作?
    • 当 debug 为 false 时,您将需要一个专门的服务器来提供媒体文件、静态文件和管理站点文件。一个示例服务器是 lighttpd。
    猜你喜欢
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-06
    相关资源
    最近更新 更多