例如,我可能希望按如下方式加载图像:
background: url("/path/to/image.png")
但是因为CSS文件没有通过模板系统运行,所以我无法访问通常的
{% load staticfiles %}
处理此类静态内容的正确方法是什么?
答案 0 :(得分:4)
浏览器已经知道了css文件路径,所以只需使用相对URL:
background: url("../img/image.png")
[编辑]
但是,如果我在/ onelevel处有一个页面,那么会发生什么?/ really / deep / nested / page中的另一个页面会不会破坏相关系统?此外,如果我最终选择在外部主持静态内容,我希望研究内容管理尽可能干 - OP。
让我解释一下。为了读取CSS文件,浏览器必须先下载它。要下载它,必须知道CSS文件URL。所以浏览器已经知道了CSS文件的路径。假设您在CDN上托管媒体,并且URL为:
http://cdn.yoursite.com/css/style.css
当您使用../img/logo.png
之类的相对网址时,浏览器会获取CSS文件的路径(http://cdn.yoursite.com/css/
)并向其附加../img/logo.png
。
效果很好,比整个路径短,让您可以在不改变点的情况下在其他项目/应用程序中重用媒体。你不能得到更多的干。
这就是为什么你不需要在CSS文件附近的任何地方使用settings.STATIC_URL,它将在HTTP服务时从文件URL派生。