我已尽可能地查看,我还没有找到我遇到的问题的答案。我花了几个小时在这里找不到。
我的前端正在项目下或应用程序树下显示静态文件夹的所有图像和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
答案 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',
]
+ 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' %}