如何在Python中高效地动态更新HTML/字符串?

2024-05-23 13:40:00 发布

您现在位置:Python中文网/ 问答频道 /正文

目标是在给定“列表头”列表的情况下动态更新HTML/字符串

要输入到html列表中的列表

list_header=['Coffee','Tea','Milk']

预定义的html模板

html = """
   <tr>
       <th>List of header name:</th>
   </tr>
<ol>

</ol>
"""

预期结果

html = """
   <tr>
       <th>List of header name:</th>
   </tr>
<ol>
  <li>Coffee</li>
  <li>Tea</li>
  <li>Milk</li>
</ol>
"""

我尝试使用下面的find-and-append方法,但它会忽略上面的部分

line = '<li> </li>'
index = line.find('</ol>')
output_line = line[:index] + list_header[0] + line[index:]

感谢您在链接到好的参考资料方面提供的帮助


Tags: of列表indexhtmllinelitrlist
3条回答

如果将内容包装在根元素中(<html>),则可以使用xml.etree.ElementTree

import xml.etree.ElementTree as ET
list_header=['Coffee','Tea','Milk']

html = """<html>
<tr>
    <th>List of header name:</th>
</tr>
<ol>

</ol></html>
"""
root = ET.fromstring(html)

for inner_text in list_header:
    list_elt = ET.Element('li')
    list_elt.text = inner_text
    root[1].append(list_elt)
print(ET.tostring(root).decode("utf-8"))

输出:

<html>
<tr>
    <th>List of header name:</th>
</tr>
<ol>

<li>Coffee</li><li>Tea</li><li>Milk</li></ol></html>

您可以将jinja用于此类项目Jinja的设计只是为了帮助您实现这一点:

# python -m pip install —user Jinja2

from jinja2 import Template


list_headers = ['Coffee','Tea','Milk']

HTML = '''
 <tr>
       <th>List of header name:</th>
 </tr>
<ol>
{% for list_header in list_headers %}
  <li> {{ list_header }} </li>
{% endfor %}
</ol>
'''

template = Template(HTML)
res = template.render(list_headers=list_headers)

print(res)

在这里阅读更多Jinja2以熟悉jinja语法

最好将HTML保存在一个单独的文件中

<html>
    <body>
        <tr>
            <th>List of header name:</th>
        </tr>
        <ol>
            {items}
        </ol>
    </body>
</html>

然后使用python脚本生成ol标记中的每个项(li)

with open("/path/to/html", "r") as file:
    html_template = file.read()

rows = [f"<li>{item}</li>" for item in items]

html_template.format(list_items = ".".join(rows))

相关问题 更多 >