python - 避免在 STYLE 组件中使用 CDATA 标签

标签 python css web2py cdata premailer

我正在用 web2py gluon html 生成一些 html库(该应用程序是独立的 - 未嵌入 web2py 框架 - 并且仅使用 gluon.html 帮助器)

我正在为其添加一些样式。由于我通过电子邮件发送生成的 html,因此我使用 premailer 预处理 html .但是 premailer 不接受 CDATA标签:

cssselect.parser.SelectorSyntaxError: Expected selector, got <DELIM '<' at 0>

我看过胶子代码,但我不明白:

class STYLE(DIV):

    tag = 'style'

    def xml(self):
        (fa, co) = self._xml()
        # no escaping of subcomponents
        co = '\n'.join([str(component) for component in
                       self.components])
        if co:
            # <style [attributes]><!--/*--><![CDATA[/*><!--*/
            # style body
            # /*]]>*/--></style>
            return '<%s%s><!--/*--><![CDATA[/*><!--*/\n%s\n/*]]>*/--></%s>' % (self.tag, fa, co, self.tag)
        else:
            return DIV.xml(self)

目前我正在做的建立我的风格是:

STYLE('body { font: normal 16px/1.6em "Open Sans",Arial,Helvetica,sans-serif; } ... ')

产生:

<style>
<!--/*-->
<![CDATA[/*&gt;&lt;!--*/
body {
     font: normal 16px/1.6em "Open Sans",Arial,Helvetica,sans-serif;
}
...

我如何使用 STYLE帮助避免拥有CDATA标签?或者我需要用 XML 来做吗?助手,手动添加 <style>分隔符?

作为附带问题:为什么 CDATA标签使用了吗?据我所知,it is not really needed对于 HTML (脚本和样式标签已经默认为 CDATA )。

最佳答案

首先,您需要将 CSS 代码放入 XML() 中。如果您不想要 CDATA 标签,您最好手动编写样式标签(这就是 STYLE 帮助程序无论如何都会做的)。

XML('<style>body { font: normal 16px/1.6em "Open Sans",Arial,Helvetica,sans-serif; }</style>')

关于python - 避免在 STYLE 组件中使用 CDATA 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20671281/

相关文章:

python - web2py 中子进程的使用

python - 如何限制 Python 线程?

python - 从维基百科的不同预算变体中提取整数价格

python - 正则表达式必须包含且只能包含

css - 如何使输入值属性的内容居中

javascript - 在输入字段中禁用滚动

python - Pandas - 创建一个包含前一列聚合的新列

python - 在 Python 中查找最快的条件

css - 地址栏中的 Logo

python - 从 Github API 解码 base64 内容