我是Django和Python的新手。我想显示存储在static
文件夹中的文件的链接。这是settings.py
所需的代码:
MEDIA_ROOT = os.path.join(BASE_DIR,'static')
MEDIA_URL = "/media/"
当我通过admin
访问这些文件时,我在浏览器中显示以下网址:
因此我尝试的是在我的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}}
也无效。
为什么这不起作用?显示链接到我的文件的正确方法是什么?
如果需要其他任何内容,请告诉我。谢谢。
答案 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)
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