【问题标题】:Generating dynamic CSS生成动态 CSS
【发布时间】:2010-08-28 05:59:31
【问题描述】:

处理用户自定义样式的最佳方式是什么?作为我正在寻找的结果的一个例子,这就足够了:

body {
   color: {{ user.profile.text_color }};
}

但是,将 CSS 作为视图提供似乎会在不断请求的文件中产生大量开销,因此这可能不是一个好的解决方案。

用户无权访问 CSS 文件,我们必须假设他们没有 Web 开发知识。

【问题讨论】:

    标签: css django dynamically-generated


    【解决方案1】:

    但是,将 CSS 作为视图提供似乎会在不断请求的文件中产生大量开销,因此这可能不是一个好的解决方案。

    如果你只生成一次 CSS 会怎样?

    1. 默认 CSS 为:/common/css.css
    2. 成员自定义CSS,现在<link />元素指向/user-specific/123.css?ts=123123123123 当然是成员的标识符,ts 参数包含一个时间戳——最后一次 CSS 修改的日期
    3. 确保您的 CSS 生成器设置了负责客户端缓存的正确 HTTP 标头
    4. 用户浏览器请求 CSS 文件 - 服务器使用简单的 304 Not Modified 标头回复 - 无需执行任何脚本或下载内容
    5. 当成员修改他的 CSS 时,您只需更新 ts - 再次只需要一个请求

    【讨论】:

      【解决方案2】:

      像往常一样通过视图动态执行 CSS,但使用激进的 caching 以便快速加载。

      【讨论】:

      • 这个解决方案有点简单。 CSS 以每个用户 为基础,正确缓存意味着每个可能的设置都有不同的缓存项。另一种方法是缓存 98% 的页面,但使用动态外包装 <div class="{{style_choice}}"> ... whatever ... </div>,它使用每个用户的设置。或者,您可以使用 JavaScript 来调整外部类,但在这种情况下可能无法接受。
      【解决方案3】:

      你可以试试django mediagenerato,其实我看了这个Q,我也在找你这样的解决方案,然后我发现Django-mediagenerator

      我还没有尝试过,但它似乎是一个解决方案。

      【讨论】:

        猜你喜欢
        • 2021-01-05
        • 2018-07-18
        • 2014-06-20
        • 2013-04-12
        • 2018-02-13
        • 2011-05-08
        • 2016-05-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多