【问题标题】:Django 1.10 media (FileField) 404Django 1.10 媒体(文件字段)404
【发布时间】:2018-06-19 00:02:01
【问题描述】:

我的第一个问题,所以放轻松。我会尽可能详细地提供。

我的设置

  • django 1.10(我知道,我需要升级)
  • python 3.5.[东西]
  • postgres 数据库
  • 独角兽
  • nginx

问题和我的尝试

问题是我最近提交了一个在本地运行良好的提交,突然间,以前渲染良好的模型图像都没有工作 - 我得到了 404 的所有图像。我尝试了以下方法:

  • 检查以前的提交
  • 重启 gunicorn (sudo systemctl restart gunicorn)
  • 重启nginx
  • 重启 postgresql
  • 使用 python manage.py shell 访问对象并检查它们是否仍与文件的 URL 关联

我的代码在本地运行时有效 - 上传的图像/文件都不会导致 404。与我的生产环境一样,logos 文件夹位于我的项目的主目录中,而不是附加到 media 文件夹(其他答案和 django 文档建议的情况就是这种情况 - 这可能是一个红鲱鱼不过)。

我的浏览器控制台显示 404 并且它正在尝试从 <domain.com>/media/logos/<filename> 获取,即使它们存储在 <project_folder>/logos/<filename> 中(我检查了文件结构)(即没有 media 文件夹),但是这以前从来不是问题。同样,在本地也是如此,但完全没问题。

我的代码和资料

在我的 models.py 我有这个字段:

class Thing(models.Model):
    ...
    logo = models.FileField(upload_to='logos/', blank=True)

...然后我在我的 HTML 文件中呈现:

<img class="..." src="{{ thing.logo.url }}>

...这又是 django 文档所说的(而不是硬编码 URL)。我在文档中读到该文件作为对象的一部分存储在数据库中,因此使用文件名引用文件路径不一定有效(或类似的东西),因此这是最好的选择。

据我所知,我的网址设置得很好:

urlpatterns = [
...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

...根据this answer(可能还有其他人)。

settings.py 中没有硬编码文件路径或 URL:它们都与 os.path... 相关。

MEDIA_URL = '/media/'MEDIA_ROOT 未设置(默认为 '')

我想不出任何其他有用的信息,但如果有,请告诉我。请帮忙!我目前有一个带有丑陋替代文本的实时网站:(

【问题讨论】:

  • youtMEDIA_URLMEDIA_ROOT设置的值是多少?
  • MEDIA_URL = '/media/' 我没有设置MEDIA_ROOT,默认为空。
  • static(...) 仅适用于开发。在生产中,您应该配置您的服务器(例如 Apache 或 Nginx)来提供文件。请参阅example for Apache and modwsgi
  • 最好设置MEDIA_ROOT 而不是使用空字符串。通常,您会将其设置到项目之外的位置,因为不应签入这些文件。
  • 这是否会影响我是否获得 404?毕竟,它曾经毫无问题地工作。我很欣赏这是@Alasdair 的最佳实践

标签: python django postgresql nginx gunicorn


【解决方案1】:

static(...) 仅在开发中有效。在生产中,您应该配置您的服务器(例如 Apache 或 Nginx)来提供文件。请参阅 Apache 和 modwsgi 的示例。 – 阿拉斯代尔Jan 9 at 22:12

感谢@Alasdair 的上述评论 - 不幸的是,我无法将其标记为答案,但它导致了它。

我没有设置 Nginx 来处理媒体文件——只有静态文件。所以我的 Nginx conf 文件现在看起来像这样:

location /static/ {
    root /home/<path>/<to>/<folder>;
}

location /media/ {
    root /home/<path>/<to>/<folder>;
}

然后,我的 Django 应用程序将文件上传到一个稍微意外的位置,因此我必须将这些文件复制到正确的媒体文件位置并设置正确。

【讨论】:

    猜你喜欢
    • 2018-07-07
    • 2016-12-05
    • 2019-05-06
    • 2013-09-05
    • 2017-01-11
    • 2017-07-08
    • 2016-07-16
    • 2017-10-30
    • 2011-07-23
    相关资源
    最近更新 更多