string.format与css标签冲突:{}的

时间:2014-09-19 02:49:47

标签: python html python-2.7

这是我在html模板中替换变量的方式

a1 = '<html><title>{0}</title><body>{1}</body></html>'
 vars = ['test', 'test']
 output = a1.format(*vars)

问题是..当html中有css时,这与css标签冲突。

因为css包含:

 {}'s

4 个答案:

答案 0 :(得分:4)

替代方法。

由于您混合使用HTML和Python代码,我建议separate the logic part and the presentation part切换到正常的模板引擎

使用mako的示例。

创建一个模板HTML文件,留下适当的“占位符”:

<html>
<head>
    <title>${title}</title>
</head>
<body>
    <p>${text}</p>
</body>
</html>

然后,在python代码中,渲染模板,为placehodlers提供值:

from mako.template import Template

t = Template(filename='index.html')
print t.render(title='My Title', text='My Text')

这将打印:

<html>
<head>
    <title>My Title</title>
</head>
<body>
    <p>My Text</p>
</body>
</html>

答案 1 :(得分:2)

只需使用双括号即可逃脱它们。

喜欢,

a1 = """div.test{{ 
 bla;
}}"""

答案 2 :(得分:0)

您可以使用Alecxe所说的模板或使用带字典的格式

a1 = '<html><title>%(title)s</title><body>%(body)s</body></html>'
vars = {'title': 'test', 'body': 'test'}
output = a1 % vars

答案 3 :(得分:0)

这个问题有几个很好的答案,但它们可能并不适用于所有情况。

  • 使用模板引擎:这是解决 OP 问题的好方法,但并非总是可以在所有环境中安装和导入非标准库,例如 mako

  • 使用双大括号 { 转义大括号 {{:这可能在某些浏览器中受到尊重,而在其他浏览器中则不然(它可能应该受到尊重,但可能不会).

在动态生成 html 或从文件中导入 html 时的另一个选择是简单地管理 html 输出的构造顺序——在格式化操作之后执行 CSS 注入。< /p>

为 CSS 准备带有占位符的模板

my_html = """<html>
<head>
    <title>My Page</title>
    <style></style>
</head>
<body>
    <p>Content = {0}</p>
</body>
</html>"""

my_css = """<style>
      body {
        background-color: gray;
      }
    </style>"""

准备带有格式的 HTML 输出

my_page = my_html.format('foobar')

格式操作后注入CSS

my_final_page = my_page.replace('<style></style>', my_css)

输出

<html>
<head>
    <title>My Page</title>
    <style>
      body {
        background-color: gray;
      }
    </style>
</head>
<body>
    <p>Content = foobar</p>
</body>
</html>

您不必使用 <style></style> 标记对作为占位符。占位符可以是任何东西,只要它是独一无二的(这样您就不会无意中替换掉其他东西)。

完整示例

#! /usr/bin/env python
# -*- coding: utf-8 -*-

my_html = """<html>
<head>
    <title>My Page</title>
    <style></style>
</head>
<body>
    <p>Content = {0}</p>
</body>
</html>"""

my_css = """<style>
      body {
        background-color: gray;
      }
    </style>"""

my_page = my_html.format('foobar')

my_final_page = my_page.replace('<style></style>', my_css)

print(my_final_page)