使用Python格式化HTML

时间:2019-01-13 06:40:08

标签: python html

我想用python格式化html代码。

我的Python文件是:

titles = ['aaa', 'bbb', 'ccc', 'ddd', 'eee']
html_text = """<html>
<head>
    <style type="text/css">
        table { border-collapse: collapse;}
        td { text-align: center; border: 5px solid #ff0000; border-style: dashed; font-size: 30px; }
    </style>
</head>
<body>
    <table width="100%" height="100%" border="5px">
        <tr>
            <td>%s</td>
        </tr>
        <tr>
            <td>%s</td>
        </tr>
        <tr>
            <td>%s</td>
        </tr>
        <tr>
            <td>%s</td>
        </tr>
        <tr>
            <td>%s</td>
        </tr>
    </table>
</body>
</html> % (titles[0], titles[1], titles[2], titles[3], titles[4])"""

f = open('temp.html', 'w')
f.write(html_text)
f.close()

我希望将这些%s设置为title [0],titles [1],titles [2],titles [3],titles [4]。

我该怎么做?

4 个答案:

答案 0 :(得分:1)

您可以使用一些template engine that mix logic into template

jinja2的示例:

  1. 安装window.google_recaptcha_public_key undefined window.google_recaptcha_public_key2 undefined

2,则代码为:

pip install jinja2

请注意,可以灵活地处理可变长度的列表。 Web框架中使用了模板引擎。

答案 1 :(得分:1)

格式字符串中有两个错误。正如U9-Forward所指出的,第一个在这里:

</html> % (titles[0], titles[1], titles[2], titles[3], titles[4])"""

%是插值运算符,因此它需要在字符串和数据之间

</html>""" % (titles[0], titles[1], titles[2], titles[3], titles[4])

第二个错误(仅在您修复了该错误之后才出现)在这里:

<table width="100%" height="100%" border="5px">

使用%运算符时,字符%变得很特殊,因此%s会执行您期望的操作。但是,发生这种情况时,"100%"是不合法的,因为正如错误消息告诉您的那样,它会放置unsupported format character '"' (0x22) at index 237。通过将光标放在字符串的开头并按向右箭头237次,您可能在一分钟之内就能找到答案。

在这种情况下,您要停留的% %必须加倍:

<table width="100%%" height="100%%" border="5px">

那给

html_text = '''<html>
<head>
    <style type="text/css">
        table { border-collapse: collapse;}
        td { text-align: center; border: 5px solid #ff0000; border-style: dashed; font-size: 30px; }
    </style>
</head>
<body>
    <table width="100%%" height="100%%" border="5px">
        <tr>
            <td>%s</td>
        </tr>
        <tr>
            <td>%s</td>
        </tr>
        <tr>
            <td>%s</td>
        </tr>
        <tr>
            <td>%s</td>
        </tr>
        <tr>
            <td>%s</td>
        </tr>
    </table>
</body>
</html>''' % (titles[0], titles[1], titles[2], titles[3], titles[4])

但是这里的根本问题是Python %字符串是一种格式化的迷你语言,而HTML是一种格式化语言,因此像这样构造HTML意味着您正在同时使用两种语言进行编程。涉及的双重思维为一些经验丰富的程序员提供了帮助,但是我们其余的人则更乐于将我们的关注点分开并一次处理一种语言。考虑使用%来构造HTML,而不是使用lxml字符串。有更多的学习曲线(出色的tutorial可以帮助您),但是您的代码将更易于编写和维护,lxml将确保您的HTML不受语法错误的影响。

答案 2 :(得分:0)

您在错误的位置结束了字符串,因此将以下代码用作完整代码:

Babakhani

现在,您将获得所需的HTML文件。

答案 3 :(得分:0)

fstrings是当今酷孩子使用的东西。

titles = ['aaa', 'bbb', 'ccc', 'ddd', 'eee']
html_text = f"""<html>
<head>
    <style type="text/css">
        table {{ border-collapse: collapse;}}
        td {{ text-align: center; border: 5px solid #ff0000; border-style: dashed; font-size: 30px; }}
    </style>
</head>
<body>
    <table width="100%" height="100%" border="5px">
        <tr>
            <td>{titles[0]}</td>
        </tr>
        <tr>
            <td>{titles[1]}</td>
        </tr>
        <tr>
            <td>{titles[2]}</td>
        </tr>
        <tr>
            <td>{titles[3]}</td>
        </tr>
        <tr>
            <td>{titles[4]}</td>
        </tr>
    </table>
</body>
</html>"""


with open('temp.html', 'w') as f:
    f.write(html_text)

您将变量放在文本的{}中,并且必须使用双{{}}来转义样式。试试吧。

此外,Python写入文件的方式是使用上下文管理器。它可以处理关闭,而无需在打开的文件上使用.close()