2

在我对 django 很陌生之前写了很多 python,并且到目前为止很喜欢它。

我以前的 Web 经验是使用 PHP,为了使我的 CSS 易于维护,我使用一个 php 文件作为我的 CSS 并将其作为 CSS 内容类型提供。因此,我可以制作可以轻松更改的变量,以使站点中的所有内容都发生变化。

例如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';
?>

和...

html {
    background-color:<?= $pink ?>;
    color: <?= $green ?>;
    font-family: <?= $std_font ?>;
}

因此,如果我想更改整个站点中黑色的含义,我只需更改顶部的 $black = 以及我的 CSS 中所有我说过 color: 的地方。将遵循。

我想在 django 中实现相同类型的东西,但不知道该怎么做。我在想我可以使用视图在 css 中呈现模板,但不确定如何去做。是否像在我的视图中创建一个 dict 并将其传递给 render_to_response 然后在我的模板文件中引用它一样简单?

例如views.py:

def style(request):
    colours = {'pink' : '#91305f', 'green' : '#a4ce39'}
    return render_to_response('styles.css', {'styles': colours},
                              context_instance=RequestContext(request))

然后,在模板/styles.css 中:

html {
        background-color:{{ styles.pink }};
        color: {{ styles.green }};
    }

这是一个可行的解决方案吗?如果是这样,似乎我将视图耦合到模板,但我无法弄清楚我将在哪里存储实现这一目标所需的数据。

谢谢亚伦

4

3 回答 3

1

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

于 2012-07-21T11:15:42.697 回答
1

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

于 2012-07-21T11:33:57.453 回答
0

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

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

于 2012-07-21T11:02:53.570 回答