51

我可以将文件上传到'/peaceroot/www/media/'我设置的媒体文件夹(),settings.py如下所示

MEDIA_ROOT = '/peaceroot/www/media/'
MEDIA_URL = '/media/'

但是通过管理员我试图访问上传的图像文件

http://localhost:8000/media/items/1a39246c-4160-4cb2-a842-12a1ffd72b3b.jpg

然后我收到 404 错误。

该文件存在于peaceroot/www/media/items/1a39246c-4160-4cb2-a842-12a1ffd72b3b.jpg

4

6 回答 6

104

在您的项目 urlpatterns 中添加媒体 url 条目:

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

...
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
于 2016-03-29T09:18:16.990 回答
26

MEDIA_ROOT 的更好方法是,

当您转移项目时,尝试使媒体路径动态化会很容易。

设置.py

BASE_DIR = os.path.dirname(os.path.dirname(__file__))


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

网址.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/dev/howto/static-files/

于 2016-03-29T09:24:34.213 回答
4

只是补充一点:如果其他答案对您不起作用,请尝试将静态 url 放在其他答案之前。像这样:

urlpatterns = static(...) + [...]

可能发生的情况是列表中的某些模式阻止请求到达静态处理程序。所以首先放置静态处理程序可以解决这个问题。为我工作。

于 2018-06-01T14:34:34.483 回答
1

这是服务器错误。我假设你正在使用 Nginx。只需将其添加到您的 Nginx 配置文件(/etc/nginx/sites-available/example.com)中,就在位置 /static/ 下

location /media/ {
    root /home/user/myprojectdir;
}

在这里,user应该是您创建的用户名, myprojectdir应该是您的项目目录

于 2021-04-18T19:50:35.273 回答
0

在模板中通过锚标签创建链接并将 .url 添加到该文件对象的末尾,例如

{% for post in post %}

   <a href="{{post.imagefilename.url}}" > 

{% endfor %}
于 2021-02-24T15:18:16.220 回答
0

在我的开发服务器中,我通过在 settings.py 中注释掉这些行来修复它

STATICFILES_DIRS = (
     os.path.join(BASE_DIR, 'static'),
)
于 2020-07-07T12:11:21.593 回答