【问题标题】:Django static image not displayingDjango静态图像不显示
【发布时间】:2017-03-05 00:23:48
【问题描述】:

我已经尽可能地查看了所有内容,但我没有找到我遇到的问题的答案。我在这上面花了几个小时,发现没有用。

我的前端在项目下或应用树下使用静态文件夹显示所有图像和 css。

在我进行更改以使用动态 url,并从项目文件夹(向下一个文件夹)中创建静态文件夹后,collectstatic 突然间我的图像消失了,css 仍然可以直接路径或动态工作。

我尝试过对图像进行相同操作,直接路径(因为文件夹的副本仍保留在项目文件夹中)直接路径不起作用,动态路径也不起作用。

它也没有返回 404,在第一次加载时,它返回 200,在第二次 304 上,就好像图像在屏幕上一样,但它不是。没有错误,但不存在该死的图像。 令我困惑的是css可以工作,但图像不显示。

下面是我的代码。

---|settings.py

STATIC_URL = '/static/'

STATICFILES_DIRS = [os.path.join(BASE_DIR, "static"),
  #'/var/www/static/',
]

STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "static_cdn")

---|url.py

if settings.DEBUG == True:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

---|main.html(模板)

{% load staticfiles %}
 <img src={% static "images/banner_top.png" %}>

<img src="..static/images/banner_top.png">

<img src="static/images/banner_top.png">

在浏览器上图像不显示,但后端显示 200 和正确的图像路径。

http://127.0.0.1:8000/static/images/banner_top.png

[22/Oct/2016 22:32:10] "GET /static/images/banner_top.png HTTP/1.1" 200 0

这是标题

一般

Request URL:http://127.0.0.1:8000/static/images/banner_top.png
Request Method:GET
Status Code:200 OK
Remote Address:127.0.0.1:8000

请求

 Content-Length:0
 Content-Type:image/png
 Date:Sun, 23 Oct 2016 08:06:17 GMT
 Last-Modified:Fri, 21 Oct 2016 06:54:06 GMT
 Server:WSGIServer/0.1 Python/2.7.10

【问题讨论】:

    标签: python html django image django-templates


    【解决方案1】:

    嗯,问题已经解决了。 #django IRC 上的 Koterpillar 帮助我解决这个问题。

    系统不知何故清空了图像文件(已损坏)(我认为这发生在 collectstatic 上),这就是图像被加载但没有显示的原因。

    检查后

    curl -D - http://127.0.0.1:8000/static/images/banner_top.png
    

    只返回标题,没有内容。因此,请继续检查图像文件并验证内容是否消失。我用新图片替换,然后在网站重新加载时再次显示。

    非常感谢 Koterpillar

    【讨论】:

      【解决方案2】:

      首先我不明白你为什么设置如下。

      urls.py

      if settings.DEBUG == True:
          urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
      

      settings.py

      STATIC_URL = '/static/'
      
      STATICFILES_DIRS = [os.path.join(BASE_DIR, "static"),
        #'/var/www/static/',
      ]
      
      STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "static_cdn")
      

      因为你在 urls.py 中写了static(settings.STATIC_URL, document_root=settings.STATIC_ROOT),同时你正在使用django.contrib.staticfiles 应用程序。如果将django.contrib.staticfiles 放入INSTALLED_APPS,它会自动切断静态文件。当你想手动切断静态文件时,你可以在 urls.py 中使用static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

      请查看serving static files during development

      一个选项

      1.你不使用 django.contrib.staticfiles。

      INSTALLED_APPS = [
      (...)
      #    'django.contrib.staticfiles',
      ]
      
      1. 然后手动提供静态文件。

      在 urls.py 中

      + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
      

      在 settings.py 中

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

      如果你在项目文件夹下收集静态

      STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "static_cdn")
      

      第二个选项

      1.你使用 django.contrib.staticfiles。

      INSTALLED_APPS = [
      (...)
      'django.contrib.staticfiles',
      ]
      
      STATIC_URL = '/static_cdn/'
      STATICFILES_DIRS = [os.path.join(BASE_DIR, "static_cdn"),
      and other path
      ]
      

      首先,它会在app文件夹树下找到静态文件(现在我设置STATIC_URL = '/static_cdn/',所以在名称为static_cdn的文件夹中)。如果要获取不在应用文件夹树中的静态文件,请设置STATICFILES_DIRS =

      我不知道为什么它返回 200 并且没有在您的浏览器上准确显示任何图像。但我假设您将两者混合在一起,不知何故导致了一些问题。请检查一下。

      希望我的想法对你有帮助!祝你好运!

      【讨论】:

      • 我使用 if settings.DEBUG 只是为了检查设置是否处于调试状态,它不会影响系统的功能。我尝试过的所有方法都不起作用,我的问题在于为什么它返回 200,但图像只是丢失了。它可以找到目录和文件,所以配置是正确的。
      • 我明白了。首先我提到,因为你不需要将 django.contrib.staticfiles 放在 INSTALLED APP 中,或者如果你在真正的服务器中而不是在开发过程中操作你的代码,你不需要以 urls 模式手动提供静态文件,对吧?因为您要为 Apache 服务器设置静态根目录。您将在指定文件夹中为 apache 收集静态文件。 (这是我的想法)所以我解释了,因为在我看来,您似乎在开发过程中混合了服务静态文件(您发布了 localhost 主机)。
      • 我会考虑更多可能导致您出现这种情况的原因。 200 状态但没有图像显示
      • 我在 urls.py 上注释掉了。不影响系统运行。此外,即使我编码使用本地静态/图像也不起作用。无论如何,无论我采用这种方式,使用外部(远程)静态或内部静态文件夹,只有我的 css 正确加载。使用 collectstatic,它可以正常运行并且也可以正确移动文件。我创建了一个新项目,只需检查一下即可。通过最小的更改,只是为了使应用程序返回带有图像的模板,图像不会显示。 django 1.10.2 有什么错误吗?
      • 好吧,我试图犯同样的错误。但我无法得到它。所以显示的图像就像您在屏幕上没有状态 200 一样?我想知道是否只有特定图像会这样发生,或者静态文件夹中的所有图像都有相同的问题。好吧,我真的很想找出你的问题发生的原因,我调整了我的示例代码并进行了测试。但到目前为止,我无法找到我的知识。
      【解决方案3】:

      我遇到了同样的问题。我使用的是 Django 1.11 所以经过几次调整后我找到的解决方案:-

      这可行:不使用 {% load staticfiles %}

      {% static '/images/banner_top.jpg' %}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-04
        • 2020-02-17
        • 2015-07-17
        • 2016-11-23
        • 2021-06-24
        • 1970-01-01
        • 2020-11-28
        • 2017-04-14
        相关资源
        最近更新 更多