【问题标题】:Avoid CDATA tag in STYLE component避免在 STYLE 组件中使用 CDATA 标记
【发布时间】:2013-12-19 00:22:04
【问题描述】:

我正在使用 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 助手手动添加 &lt;style&gt; 分隔符?

作为一个附带问题:为什么要使用 CDATA 标签?据我所见,it is not really needed 代表HTML(脚本和样式标签已经默认为CDATA)。

【问题讨论】:

    标签: python css web2py cdata premailer


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!我最终手动放置了样式标签。我仍然想知道为什么 web2py 使用 CDATA,因为正如我的问题中所述,html 并不真正需要它(或者我错了吗?)
    • 请随时post and issue 了解它。
    猜你喜欢
    • 2013-05-17
    • 1970-01-01
    • 2012-01-29
    • 2012-08-08
    • 2023-03-22
    • 2023-04-02
    • 2022-12-06
    • 2019-07-20
    • 1970-01-01
    相关资源
    最近更新 更多