为什么django没有解析并替换我的css文件中的模板标签?

时间:2016-02-06 10:43:39

标签: css django

这是我设置文件的片段

STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static_cdn')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'media_cdn')

我的基本目录中还有一个名为static的文件夹,其中另一个是我的blog.css样式所在的名为css的文件夹。

我的html文件使用以下链接到我的css文件:

{% load staticfiles %}
<head>
<link rel="stylesheet" href="{% static 'css/blog.css' %}">
</head>

媒体文件(图片)没有问题。命令行显示正在将静态文件收集到static_cdn和

`/static/css/blog.css HTTP/1.1" 200 39`

虽然我认为它意味着django找到我的css文件没有问题但是样式没有出现在项目中。

最后,我的css文件中的一个块,到目前为止唯一的块:

body: {
  background: url("{% static 'images/jumbotron.jpg' %}");

}

任何人都可以指出我正确的方向吗?谢谢

3 个答案:

答案 0 :(得分:3)

将此文件放入您的css文件中将无法正常工作。

{% load staticfiles %}
<head>
<link rel="stylesheet" href="{% static 'css/blog.css' %}">
<style>
    body: { background: url("{% static 'images/jumbotron.jpg' %}"):}
</style>
</head>

要解决此特定问题,请按照其他答案中的建议操作。我将试着解释为什么你当前的方法不起作用。

django模板引擎不会解析您的css文件,除非您明确告诉它这样做。模板对于处理html非常有用,其中内容通常会从一个请求更改为下一个请求。

Css文件是完全不同的情况。最好使用像Sass或Stylus这样的样式表处理器构建它们,然后为每个访问者提供相同的css文件。

或者您可以手工编写普通的旧CSS,这对小型项目更好。学习css预处理本身就是一个项目。

理论上,你可以使用django视图在每个请求上动态地提供生成的css文件,但这似乎浪费了处理周期。

如果你真的想在你的CSS中使用django模板标签,最好在你的html页面的头部使用内联样式表。您可以将所有页面常用的样式放在css文件中,只需将自定义动态内容放在头部即可。这样的事情可能会奏效。

HttpContext.Current.Request.IsLocal

这可以用于myspace样式的页面,在这些页面中,您希望用户能够使用他们自己选择的自定义字体和背景图像来破坏自己的页面。

答案 1 :(得分:2)

删除CSS文件中的:并使用普通网址

body{
    background: url('../images/jumbotron.jpg');
    direction:rtl;
}

如果同一目录中的css文件和图像文件夹使用

`images/jumbotron.jpg`

否则你应该使用

`../images/jumbotron.jpg`

还要检查您的地址和文件名是否存在错误格式,大写等错误。

要验证您应该将哪个路径用作相对网址,请确认您可以使用完整的预期网址在浏览器中打开图片。

http://example.com/static/images/jumbotron.jpg 

图片网址必须相对于css网址的路径。看看你的问题,css在一个名为css的文件夹中,图像在图像中。如果这是css url:

http://example.com/static/css/blog.css?

然后相对网址应为"../images/jumbotron.jpg"

答案 2 :(得分:0)

您应该使用常规方式来使用静态图像:

body {
   background: url('images/jumbotron.jpg');
}

有关文件夹结构的详细信息,请参阅文档中的this example