【问题标题】:Django media-files get 404 even when files definitely exist即使文件确实存在,Django 媒体文件也会得到 404
【发布时间】:2013-02-10 16:38:03
【问题描述】:

我意识到这是一个在这里提出的很多问题(我阅读了很多),快速解释开发场景并非易事,所以我将把它压缩成一个具体的简单问题可以解释一切,我没有遇到:

无论模板和设置参数如何生成最终 url,它们最终都会成功生成粘贴在其中一个渲染页面中的图像 url(类似于:localhost:8000/static/images/image-name. jpg),我可以看到,一切都很完美。

我遇到的问题是在不同的代码部分(和应用程序)中,尽管生成的 url 似乎与我现有的目录和文件匹配,但我不断收到 404,我不知道它为什么会失败。 所以我所做的只是将我似乎无法加载的图像复制到同一个合法文件夹中(只是将文件粘贴到那里),并修改了 url (localhost:8000/static/images/new-image-name. jpg) - 并得到一个 404(即使在重新加载 django 之后)。 我认为这与 db-objects (ImageField 等) 没有任何关系,因为我只是在挑战 url-parse-and-conversion 机制-并且无法弄清楚为什么它适用于某些但不是全部某些路径上的图像(相同的 jpg 格式,图像在图像编辑器中成功加载,实际上是在 mspaint 中绘制的)。

(据我所知,urls include urlpatterns += staticfiles_urlpatterns() 这是唯一与静态相关的 url-line)。

任何想法都将不胜感激,我一定遗漏了一些关于 url 解码的内容。

谢谢。

【问题讨论】:

  • 您是否在已安装的应用程序中使用静态文件应用程序?您的 STATIC/MEDIA_URL 和 STATIC/MEDIA_ROOT 设置是什么?你有 DEBUG = True 还是 False?
  • 我希望干净和一般的问题(在同一文件夹中粘贴文件,但 url-is-still-not-responsive-for-new-files)将避免这些技术性问题并且仍然会引导我找到答案.. STATIC_URL 是“/static/”,MEDIA_URL 是“/static/media/”。 (虽然这两个 - 主要是 MEDIA_ROOT - 在我的服务器或 windows-development-box 之间是不同的,这就是我遇到这个问题的地方)
  • 它只是本地工作与远程工作的区别吗?还是在两个地方都发生了相同的行为?
  • 还没有在 linux 服务器上测试过这个(并且希望知道发生了什么,之前)。所以你同意这是一种奇怪的行为?
  • 如果您在本地运行并利用 staticfiles 应用程序,您的某些文件没有被提供,而有些文件没有被提供,这似乎很奇怪。

标签: django http-status-code-404 django-urls django-models


【解决方案1】:

实际上,这只是因为 Web 服务器将所有请求的处理转发给应用程序服务(wsgi,uwsgi),后者将请求转发给 Django。

可能我错了,但我认为应用程序服务不应该担心静态文件。 并且因为我在应用程序位置之前在 Web 服务器(在我的情况下为 nginx)配置中为静态文件夹创建了单独的位置:

location /static/ {
    access_log        off;
    expires           max;
}

location / {
    include         uwsgi_params;
    uwsgi_pass      unix:///run/uwsgi/app/mysite/socket;
}

【讨论】:

    猜你喜欢
    • 2012-12-09
    • 2019-10-13
    • 2019-05-06
    • 2016-12-05
    • 2016-07-16
    • 2018-06-19
    • 2013-09-05
    • 2017-10-30
    • 1970-01-01
    相关资源
    最近更新 更多