一个直观、高性能的html呈现框架

htmldoom的Python项目详细描述


htmldoom

直观,高性能HTML渲染框架

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><>>>>>>>>><>>>>>>>>>>>>>>>>>

><

>

>

>>

>>

>

>>

>>>>

p>

>>> from htmldoom import render, composite_tag
>>> 
>>> clipboard_copy = composite_tag("clipboard-copy")
>>> print(render(clipboard_copy(value="foo")("Copy Me")))
<clipboard-copy value="foo">Copy Me</clipboard-copy>

一种快速的动态元素呈现机制

选择适合您的语法:

语法1

>>> from htmldoom import renders, elements as e
>>> 
>>> @renders(
...     e.p()("{x}"),
...     e.p()("another {x}"),
... )
... def render_paras(data: dict) -> dict:
...     return {"x": data["x"]}
>>> 
>>> render_paras({"x": "awesome paragraph"})
<p>awesome paragraph</p><p>another awesome paragraph</p>

语法2

>>> from htmldoom import renders, elements as e
>>> 
>>> render_paras = renders(
...     e.p()("{x}"),
...     e.p()("another {x}"),
... )(lambda data: {"x": data["x"]})
>>> 
>>> render_paras({"x": "awesome paragraph"})
<p>awesome paragraph</p><p>another awesome paragraph</p>

注意:此机制在文件加载和重用时编译模板。

renders( ...compile-time code... )( ...runtime code... )

从运行时移到编译时的执行次数越多,执行速度越快。
如果正确使用此机制并将动态页折射到更小的组件中,它的性能可能超过传统的模板渲染引擎。所以编译时代码中的每个{`或}都需要用{{或}转义。

带有开关盒(可能无用)的函数式foreach循环

>>> from htmldoom import elements as e
>>> from htmldoom import functions as fn
>>> 
>>> tuple(fn.foreach(["good", "bad", "evil"])(
...     lambda x: fn.switch({
...         x == "good": lambda: e.span(style="color: green")(f"this is {x}"),
...         x == "bad": lambda: e.span(style="color: yellow")(f"this is {x}"),
...         x == "evil": lambda: e.span(style="color: red")(f"this is {x}"),
...         fn.Case.DEFAULT: lambda: fn.Error.throw(ValueError(x)),
...     })
... ))
(b'<span style="color: green">this is good</span>',
 b'<span style="color: yellow">this is bad</span>',
 b'<span style="color: red">this is evil</span>')

Find more examples here

q/a

这里的目标是什么?

主要目标是使用python编写动态html页面更干净、更简单、更安全和直观。

性能如何?

尽管性能不是这里的主要目标,但它不应该成为障碍。htmldoom使用纯函数和可散列的输入参数作为元素。因此,它可以在内部有效地使用缓存。它还提供了一种友好的机制,可以在编译为字节码时使用@renders装饰器预先呈现页面的静态部分。
此外,由于它可以帮助您(可能会迫使您)将网页重构为多个呈现函数,因此您可以自由使用任何您喜欢的优化。尝试在呈现函数中放入@lru_cache

是否有基准?

>

>

>

>

插件和生态系统的插件和生态系统的插件和生态系统

>

>

>

>

>

>

>

贡献

退房 contributing guidelines.

<;small>;注意:此文件是使用this script.<;small>;生成的;

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
serversocket Java服务器socket中断如何   java通过随机类和排序为数组生成数据   @Column length大于255个字符的java实体   java在使用NIO2 API时消除检查异常   java使用用户凭据通过Microsoft Graph API上的控制台应用程序发送电子邮件   java将2个ArrayList一个接一个地显示到jTextArea中,根据输入的数据多次显示   java无法使用导入的库。安卓工作室。谷歌云端点jar   spring boot Neo4j Apoc在java中获取结果摘要时的情况   转义特殊字符javajson   无法在java中使用OpenCV读取图像,涉及unicode路径   swing Document Listener java“无法实例化DocumentListener类型”   java Piglatin,难以理解如何移动“.”一串   java映射请求基于一个可观察对象中的每个元素,使用改进?   java在可扩展字符串中搜索时,如何忽略字符的大小写?   在包中分组类的java约定   python为Java应用程序创建Ubuntu指示小程序   java Camunda:如何通过processInstanceId获取所有已完成的任务