Django静态图像不显示

时间:2016-10-22 22:57:49

标签: python html django image django-templates

我已尽可能地查看,我还没有找到我遇到的问题的答案。我花了几个小时在这里找不到。

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

我做了更改以使用动态网址,并在项目文件夹中创建了静态文件夹(一个文件夹向下)确实收集了我的图像突然消失了,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

这是HEADER

GENERAL

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

REQUEST

 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

3 个答案:

答案 0 :(得分:2)

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

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

检查

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

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

非常感谢Koterpillar

答案 1 :(得分:0)

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

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. 然后maunally服务静态文件。
  2. 在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的文件夹中)。如果您想获取不在app文件夹树中的静态文件,请设置STATICFILES_DIRS =

    我不知道为什么它返回200并且没有准确地在您的浏览器上显示任何图像。但我认为你把两个混合在一起,不知怎的,它造成了一些问题。请检查一下。

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

答案 2 :(得分:0)

我遇到了同样的问题。我正在使用Django 1.11 经过几次调整,我找到了解决方案:-

这有效:不使用{%load staticfiles%}

{% static '/images/banner_top.jpg' %}
相关问题