【问题标题】:What django template filter to use for embedding css in a style tag用于在样式标签中嵌入 css 的 django 模板过滤器
【发布时间】:2012-10-03 00:14:41
【问题描述】:

我有一个模板,我需要在样式标签中嵌入一些来自模型的 CSS,如下所示:

<style>{{m.get_css_text}}</style>

(如果重要,m 实际上是一个 for-in var)

除了仅在 IE 中发生的一个故障外,这没有问题。我在 CSS 中有一个规则包含一个过滤规则,它使用引号,像这样 -

filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffffff", endColorstr="#f5f5f5") !important;

django 的默认转义行为是对引号进行转义,这会破坏 CSS 规则,这会破坏 IE 中适用该规则的 CSS。

使用 |safe 过滤器当然可以解决这个问题,但我宁愿不使用它。目前持有 CSS 的模型只能由我的员工编辑,但将来可以由我们的用户创建。

我的问题是——我应该使用什么过滤器来防止引号等转义,但要保证标签安全?到目前为止,我唯一的想法是使用 removetags 过滤器,但我不确定这是不是最好的想法。

谢谢!

【问题讨论】:

  • 你可以通过类似filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#{{m.startColor}}", endColorstr="#{{endColor}}") !important;, so that data is not mixed withthe html 来避免这个问题
  • 感谢您的建议!但是,现在我必须将整个 CSS 规则集保留为文本块,所以我不能这样做。
  • 您可以尝试在变量文本中交替使用单引号 ' 和模板中的双引号 "

标签: django filter django-templates


【解决方案1】:

只需使用striptagssafe 的组合,即:

<style>{{m.get_css_text|striptags|safe}}</style>

删除 HTML 标记后,safe 没有什么“不安全”了(抱歉,我忍不住了)。

【讨论】:

    猜你喜欢
    • 2020-02-16
    • 2013-03-16
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 2011-08-01
    • 2016-07-06
    相关资源
    最近更新 更多