它应该能够以高度面向对象的方式创建,修改和读取X /
HTML,仍然感觉DOM喜欢但不是肥胖,并且真的是
Pythonic.
最好它也会处理格式错误的HTML,但我们可以跳过这个模板.
最好它也会处理格式错误的HTML,但我们可以跳过这个模板.
例如,我想这样做:
- >> from someAmazingTemplate import *
- >> html = Template('<html><head><title>Hi</title></head><body></body></html>')
- >> html.head.append('<link type="text/css" href="main.css" rel="stylesheet" />')
- >> html.head.title
- Hi
- >> html['head']['title']
- Hi
我应该能够使用/定义短函数并像这样使用它们:
- >> html.head.append(stylesheet(href="main.css"))
- >> html.body.append(h1('BIG TITLE!12',Class="roflol"))
- >> html.body.SOURCE
- <body>
- <h1 class="roflol">
- BIG TITLE!12
- </h1>
- </body>
注意:如果它不存在,我将使用BSD / MIT / Python许可证.非常欢迎帮助.
任何有助于更多Pythonic Web应用程序开发的东西都会很棒.
非常感谢!
-Luke Stanley
解决方法
第一部分大部分可以在
ElementTree之前完成,但需要更多步骤:
- >>> import xml.etree.ElementTree as ET
- >>> html = ET.XML('<html><head><title>Hi</title></head><body></body></html>')
- >>> html.head = html.find('head')
- >>> html.head.append(ET.XML('<link type="text/css" href="main.css" rel="stylesheet" />'))
- >>> html.head.title = html.head.find('title')
- >>> html.head.title.text
- 'Hi'
第二部分可以通过创建Element对象来完成,但是你需要做一些自己的工作来使它按照你真正想要的方式发生:
- >>> html.body = html.find('body')
- >>> my_h1 = ET.Element('h1',{'class': 'roflol'})
- >>> my_h1.text = 'BIG TITLE!12'
- >>> html.body.append(my_h1)
- >>> html.body.SOURCE = ET.tostring(html.body)
- >>> html.body.SOURCE
- '<body><h1 class="roflol">BIG TITLE!12</h1></body>'
您可以创建自己的样式表函数:
- >>> def stylesheet(href='',type='text/css',rel='stylesheet',**kwargs):
- ... elem = ET.Element('link',href=href,type=type,rel=rel)
- ... return elem
- ...
- >>> html.head.append(stylesheet(href="main.css"))
整个文件:
- >>> ET.tostring(html)
- <html><head><title>Hi</title><link href="main.css" rel="stylesheet" type="text/css" /></head><body><h1 class="roflol">BIG TITLE!12</h1></body></html>
但是,我认为如果你最终要编写自己的东西,这是一个很好的起点. ElementTree非常强大.
编辑:我意识到这可能不是你想要的.我只想提供一些可用的替代方案,并证明它实际上可以在没有太多工作的情况下完成.