类似于deliverance的实现,仅适用于html输出(没有主题文件)
项目描述
简介
Bumblebee是一个类似于deliverance的html转换框架实现,仅适用于html文档输出。
它不使用xslt,所以不如Diazo快;然而,它实现了在html输出上移动元素这一非常简单的用例。
为什么
因为我几乎不需要完整的deliverance方法来完成我想做的事情。事实上,如果我只是想在一个页面上移动一个元素,通常是一件麻烦事。
如何使用
使用非常xml语法配置您的转换。
示例
HTML
<html> <head></head> <body> <div id="#header"></div> <div id="content"></div> <div id="footer"></div> </body> </html>
规则XML
<xml> <block if-content="#content"> <after src="#header" dst="#footer" /> </block> </xml>
运行它通过
from bumblebee import transform from repoze.xmliter.utils import getHTMLSerializer from bumblebee.xml import convertRules html = getHTMLSerializer(output) rules = convertRules(rules_xml) result = transform(html, rules)
选择器
对于选择元素的xml配置,您可以使用CSS选择器(默认)或XPath。
要使用XPath,只需在节点名后附加‘-path’
<after src-xpath="/html/body/div[0]" src-xpath="/html/body/div[2]" />
任意HTML
使用此方法将HTML注入到页面中
<after src-html="" dst="#foo"> <div id="foobar"> <h1>hello, world</h1> </div> </after>
规则
之前
将一个元素移动到另一个元素之前
<before src="#foo" dst="#bar" />
将“#foo”移动到“#bar”之前
之后
将一个元素移动到另一个元素之后
<after src="#foo" "#bar" />
将“#foo”移动到“#bar”之后
删除
从DOM中删除一个元素
<drop src="#foo" />
替换
用另一个元素替换一个元素
<replace src="#foo" dst="#bar" />
用“#src”替换“#dst”
类
为元素添加或删除类
<class src="#foo" add="three four" remove="one two" />
从“#foo”中删除类“one”和“two”,并添加类“three”和“four”。
标签
更改标签
<tag src="#foo" tag="p" />
分组
用条件将规则分组在一起
<group if-content="#foo"> <drop src="#bar" /> </group>
如果“#foo”在文档中,则执行一些规则。
条件
if-content
如果选择器在文档中找到,则执行操作
<after src="#foo" dst="#bar" if-content="#foo" />
非条件
任何条件都可以被否定以产生相反的效果
<drop src="#foo" if-not-content="#bar" />
扩展
创建规则
from bumblebee.rules import BaseDouble class Append(BaseDouble): def __call__(self, root): src, dst, skip = self.process_nodes(root) if skip: return None dst = dst[0] for el in dst: dst.append(el) return src from bumblebee.xml import addTag addTag('append', Append)
要使用此规则,您会
<append src="#foo" dst="#bar" />
创建条件
from bumblebee.conditions import BaseIf class IfPath(BaseIf): def __init__(self, path, extras={}): super(IfPath, self).__init__(extras) self.path = path def __call__(self, root): req = self.extras['request'] path = req['PATH_INFO'] if self.path.startswith('/'): return path.startswith(self.path) else: return self.path in path from bumblebee.xml import addCondition addCondition('path', IfPath)
要使用此条件,您会
<drop src="#foo" if-path="/foo/bar" />
或
<drop src="#foo" if-not-path="/foo/bar" />
变更日志
1.0a2 ~ (2011-09-22)
添加对任意HTML的支持
更好地支持添加新的选择器、条件、规则
更好的解析
更好地处理额外的参数,以便规则可以更容易地缓存
项目详情
关闭
Bumblebee-1.0a2.zip 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 34efd460ceee668e629e958cffe82610a81c14fe919a2d6533ad9dc4e60278a4 |
|
MD5 | a3d7de6d1e29f2d18d6bd5d43e3d48fa |
|
BLAKE2b-256 | def732f866780a9b41683d90f427b27dba97aeb9ba04c3ff3d0e93cc26653ded |