Django:提供用户上传的文件

时间:2017-09-24 05:58:21

标签: python django

我是Django和Python的新手。我想显示存储在static文件夹中的文件的链接。这是settings.py所需的代码:

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

当我通过admin访问这些文件时,我在浏览器中显示以下网址:

  

http://127.0.0.1:8000/media/filename.pdf

因此我尝试的是在我的HTML代码中提供该文件的链接:

<a href="/{{instance.docFile.url}}/">File</a>

但是,只显示http://127.0.0.1:8000/media/filename.pdf而不是显示/media/filename.pdf,这会导致错误。

localhost:8000/之前添加{{instance.docFile.url}}也无效。

为什么这不起作用?显示链接到我的文件的正确方法是什么?

如果需要其他任何内容,请告诉我。谢谢。

3 个答案:

答案 0 :(得分:2)

错误即将发生,因为您的文件未存储在media中。它存储在static中,但存储在您的数据库存储media URL中。更改您的MEDIA_ROOT(如下所示)并尝试再上传一次

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
不要砍掉斜线 :

<a href="{{instance.docFile.url}}">File</a>

答案 1 :(得分:2)

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)
settings.py

中的

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

然后在模板

<a href="{{instance.docFile.url}}">File</a>

如果您想了解,请参阅文档Manage static files

答案 2 :(得分:0)

请参阅Django setting MEDIA_ROOT文档,以便更好地了解您的尝试。

首先,MEDIA_ROOT和STATIC_ROOT必须具有不同的值。

STATIC_ROOT = os.path.join(BASE_DIR, "static")
STATIC_URL = '/static/'

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

有关详细信息,请参阅static files文档。

其次,您需要将这些设置添加到基础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)

如果您想在模板中使用 {{{{{}}}} ,请在中添加'django.template.context_processors.media' settings.py中的 TEMPLATES 的“context_processors”选项。

HTML 页面的顶部添加 {%load static%} ,然后显示您的媒体:

<img src="{{ MEDIA_URL }}{{ docFile }}" alt="test">

请花点时间阅读Django文档,相信我会帮助您,并查看MEDIA_URL