在CSS文件中使用Django变量

时间:2011-05-18 23:51:52

标签: python css django templates django-templates

我正在尝试使用Django模板引擎或任何其他方法创建动态 CSS文件。

目前,我有一个CSS规则,如下所示:

background-image: url('http://static.example.com/example.png');

其中http://static.example.com对应于Python中的STATIC_URL变量。使用Django模板引擎,我理论上可以这样写:

background-image: url('{{ STATIC_URL }}example.png');

我的问题是,如何使用Django模板引擎(或任何其他方法)动态生成CSS?

2 个答案:

答案 0 :(得分:12)

这里一个非常好的解决方案是使用django-compressor。首先,如果您要提供多个CSS文件,压缩器将通过删除请求数来帮助改善页面加载时间。

压缩/连接文件的副作用是压缩器重写css文件中的url,因此相对引用的静态文件(例如../img/logo.png)自动成为完全限定的url,带有静态文件url(例如http://static.example.com/img/logo.png)。

或者,您可以编写自定义过滤器来实现您想要的功能,或者,您可以将完全静态的CSS和一些动态部分压缩到单个文件中(例如,在基本布局文件中执行此操作):

{% compress css %}
   <link .... />
   <style>
       .some_rule {background-image:{{MEDIA_URL}}/img/logo.png}
   </style>
{% endcompress %}

这也意味着您不必担心效率,因为css / js文件是在首次访问使用它们的模板时生成的,并且它们作为普通文件存储在静态目录中(这是可配置的) ,因此它们作为普通的静态文件提供。

答案 1 :(得分:9)

您基本上有两个选择:

  1. 使用urls.py中的条目等动态提供CSS,就好像它是一个HTML页面一样。你的模板文件只是CSS而不是HTML,但会使用普通的Django模板语法等。

  2. 快捷方式:使用相对路径引用背景图像。这可能适用于您的环境,也可能不适用,但这是一种让静态CSS文件根据托管位置引用不同路径的便捷方式。