Ludic:面向 Python 的新框架,原生无缝支持 Htmx
对 Ludic 的总体印象
- 轻量级 Python 框架,通过“组件”构建 HTML,深度集成 htmx,并使用 Starlette 和现代类型标注。
- 有些人认为组件示例(自定义
Link)很能说明这种风格;也有人觉得它作为第一印象有些令人困惑或不够惊艳,希望有更清晰的定位和文档。 - 也有几位评论者喜欢在 Python 中使用类型安全、可复用的 HTML 组件这一想法,并认为这有生产力收益。
Python 中写 HTML vs 模板
- 一个反复出现的分歧是:有人不喜欢把 HTML“偷偷塞进 Python”(或 JavaScript)里,更偏好传统模板和关注点分离。
- 另一些人则认为把 HTML 嵌入 Python 中可以:
- 对“模板”做静态分析(mypy、linters、formatters、tests)。
- 相比许多模板引擎,带来更好的复用和组合性。
- 让副作用更显式(模板里不会隐藏数据库调用)。
- 批评者担心前端标记与后端逻辑耦合过紧,以及长期维护性问题,尤其是在示例把数据库访问和渲染混在一起时。
语法、类型与结构化表示
- 关于使用 f-string 还是用结构化数据/对象(SXML/hiccup 风格)表示 HTML 的争论。
- 结构化对象的支持者希望更容易遍历、模式匹配,并获得更好的工具支持。
- 作者一侧的约束是:希望保持在标准 Python 类型系统之内;并指出缺少类似 Rust 的 Yew/JSX 风格类型系统那样的宏系统。
Async/ASGI 方面的担忧
- 有人表示曾被 Python async “坑过”:出现意外 bug、调试困难,以及并发陷阱。
- aiohttp 风格的单线程 async 服务器可能会受到队头阻塞影响,并且无法充分利用多核硬件。
- 也有人指出,并发在任何生态里都很难,不是 Python 独有的问题。
与其他 HTML 生成工具的比较
- 提到许多类似思路:dominate、hotmetal、neat-html、htpy、fast_html、Mixt/pyxl、yattag 等,以及非 Python 类比(Elm、hiccup、Kotlin 的 kotlinx-html)。
- 有人表示,相比 Jinja 类字符串模板,这类方案能显著提升生产力和速度。
htmx 的角色与集成边界
- htmx 因提高生产力而受到称赞,但被描述为一个“电器”,而不是完整框架。
- 当仅通过 HTML 属性和服务器渲染片段来使用时,它运行良好。
- 将更复杂的客户端 JS 和状态(React、jQuery 等)整合进来会因生命周期交互而显得别扭;有人建议用 Alpine.js、Stimulus 或自定义元素来做轻量交互。
对新框架的怀疑
- 少数人对不断出现的新 Web 框架感到疲劳,并担心把 htmx 包装进更大的抽象层会重新引入 HTMX 想要避免的复杂性。
- 有些人更偏好最小化、可组合的库,而不是有强意见的全栈框架。