避免在STYLE组件中使用CDATA标记

时间:2013-12-19 00:22:04

标签: python css web2py cdata premailer

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

我正在添加一些样式。由于我通过电子邮件发送生成的html,因此我使用premailer预处理html。但预制商不接受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标签?据我所知,HTML CDATA(默认情况下,脚本和样式代码已经{{1}})。

1 个答案:

答案 0 :(得分:1)

首先,您需要将CSS代码放在XML()中。如果你不想要CDATA标签,你可能最好只需手动编写样式标签(无论如何都是STYLE帮助器。)

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