这是我在html模板中替换变量的方式
a1 = '<html><title>{0}</title><body>{1}</body></html>'
vars = ['test', 'test']
output = a1.format(*vars)
问题是..当html中有css时,这与css标签冲突。
因为css包含:
{}'s
答案 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>
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)
<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)