css中的django变量-我可以使用模板吗

css中的django变量-我可以使用模板吗,css,django,django-templates,Css,Django,Django Templates,我以前写过很多python,对django还是个新手,到目前为止我很喜欢它 我以前的web经验是使用PHP,为了使CSS易于维护,我使用PHP文件作为CSS,并将其作为CSS内容类型。因此,我可以使变量,可以很容易地改变,使一切在网站上的变化 e、 g.styles.php: <?php header('Content-type: text/css'); $pink = '#91305f'; $green = '#a4ce39'; $black = '#000000'; $white =

我以前写过很多python,对django还是个新手,到目前为止我很喜欢它

我以前的web经验是使用PHP,为了使CSS易于维护,我使用PHP文件作为CSS,并将其作为CSS内容类型。因此,我可以使变量,可以很容易地改变,使一切在网站上的变化

e、 g.styles.php:

<?php header('Content-type: text/css');

$pink = '#91305f';
$green = '#a4ce39';
$black = '#000000';
$white = '#ffffff';
$std_font = "'Ruda', sans-serif";
$std_shadow = "text-shadow: 1px 1px 1px #000;";
$big_shadow = "text-shadow: 2px 2px 2px #000;";
$h_space = '10px';
?>
然后,在templates/styles.css中:

html {
        background-color:{{ styles.pink }};
        color: {{ styles.green }};
    }
这是一个可行的解决方案吗?如果是这样的话,看起来我是在将视图与模板耦合,但我无法确定在何处存储实现此目的所需的数据

谢谢
亚伦

我不确定这是不是一个好方法。可能您可以将
class
添加到要应用特定样式的元素中


无论如何,如果你想继续这个方法,你可以实现你的上下文处理器,默认情况下它会添加这些变量。参考

您可以完全按照您所说的去做,因此从不在静态根目录中的地方提供css,通过URL系统传递请求,并将文件呈现为页面。不过,对于所有客户来说,这是一种效率非常低的方法,尤其是当您在每页加载中提供多个CSS文件时。在这种情况下,您可以做的是将web服务器设置为无限期地缓存CSS文件,并且只在您发出命令时更新,在这种情况下,您将拥有静态CSS文件的所有速度优势和动态CSS文件的所有可维护性。如果您想为每个用户提供定制CSS,那么这种方法将不起作用。最后,您可以自己编写一个小解析器,它可以解析您创建的“meta css”文件,您可以在其中定义一个变量负载(如django模板),然后它将这些变量替换为您指定的变量,并将生成的css上载为静态文件。当然,您可以使用django引擎来实现这一点,只需请求页面并将生成的文件复制到静态目录,此时它将成为apache缓存的手动版本。

如果我正确理解您的问题,您希望能够轻松更改整个站点的布局,不编辑所有样式表。对我来说,听起来您不想使用内联样式和生成的css,而是使用SASS或更少,并使用变量来设计颜色:


谢谢TimD,您能否详细说明一下:“设置web服务器以无限期地缓存CSS文件,并且仅在收到您的命令后更新。”。你们是对的,当我决定改变一个站点的颜色时,它只需要改变,这样就不会经常改变,但当我有python支持时,我并不热衷于寻找和替换方法!您最好的选择可能是使用这样的工具:我自己从来没有做过,但Django有一个内置的缓存层,请参见:谢谢Rohan。我在这些变量中指定的颜色/样式是站点范围的,我这样指定它们的唯一原因是,如果我想做一个小调整,就不必查找和替换它们。因此,我认为将类添加到我想要设置样式的每个元素(一切!)对我来说将是更多的工作。另外,我喜欢编写上下文处理器的想法,但当我只在一个css视图中需要dict时,默认情况下将dict传递给每个模板似乎效率低下。你认为使用这种方法有什么我没有看到的优势?太棒了!谢谢@markijbema。我不知道这类事情的存在。考虑到sass需要ruby,我快速地在google上搜索了一下,希望能将依赖关系降到最低,并找到了pythonscss,它似乎是sass的python端口。对此有何想法/经验?就我个人而言,我不认为在当前的软件包经理时代,这真的是一个问题。使用诸如rvm/bundler for ruby、virtualenv/pip for python和npm for node这样的工具,拥有一些额外的环境并不是什么问题。我个人不知道python scss,因此无法就此提供建议(但scss是一个好的版本,它是“新的”sass)使用类似django compressor()的东西
def style(request):
    colours = {'pink' : '#91305f', 'green' : '#a4ce39'}
    return render_to_response('styles.css', {'styles': colours},
                              context_instance=RequestContext(request))
html {
        background-color:{{ styles.pink }};
        color: {{ styles.green }};
    }