用Django实现Ruby HAML?

19 投票
4 回答
3867 浏览
提问于 2025-04-16 00:12

好的,我真的很喜欢HAML。特别是它和RedCloth、BlueCloth的结合,这样我就可以在HAML中混合使用Markdown和Textile。

我也很喜欢Python和Django。

所以,我想在Django中使用HAML。现在,我知道在Python中有一些尝试模仿HAML语法的工具(比如SHPAML等)。我试过这些工具,虽然还不错,但我发现我其实更想要真正的HAML。部分原因是它的语法,还有RedCloth和BlueCloth的功能。

所以,我的问题是,如何让HAML和Django一起工作呢?

我想一个解决方案是创建HAML模板,然后每次更新时通过命令行工具把它们编译成HTML。

问题1:这样做会遇到什么问题吗?

我还想知道有没有办法让Python和Ruby更好地配合。我的一个想法是直接启动Ruby进程。这个想法可能不太好,但有没有人对此有想法?

问题2:用Python调用真正的Ruby HAML怎么样?

最后,如果有人知道有一个完整的HAML的Python实现,并且支持Textile或Markdown,还有纯文本的传递功能,请告诉我。

问题3:有没有完整的HAML到Python的转换,包括Markdown或Textile的支持?

谢谢!

4 个回答

1

我强烈建议你不要在你的 Django 视图中创建新的进程,因为这样会消耗很多资源。

你应该有一个持续运行的 Ruby 进程来为你提供模板,然后从你的 Django 代码中调用它。我把进程间通信的技术留给你去研究,但比较常见的选择是使用某种消息队列技术,或者通过套接字与 Ruby 进程进行 HTTP 通信。

2

可以试试这个链接:http://github.com/fitoria/django-haml

8

问题 1: 静态的 HTML 文件应该能正常工作(除非你打算使用 HAML 的 Ruby 评估功能来动态生成内容)。我在一个使用 SASS 样式表的 PHP 网站上也用过类似的方法。只要确保在开始修改之前先在目录监视模式下启动 HAML 就可以了;)

问题 2: 虽然可以通过创建一个 Ruby 进程来生成 HTML 代码,但我不推荐这样做,因为启动一个 Ruby 解释器并加载所需的文件会消耗很多 CPU 时间,所以最好还是使用静态文件。如果你需要 Ruby 的评估功能来将运行时生成的数据包含到文档中,建议你看看 eventmachine,并把它做成一个服务器(这样你的 Django 应用就可以连接到它,请求 HTML 生成,而不需要每次都启动一个新的解释器)。

问题 3: 这可能是最难的。有 GHRML,但已经被放弃了;SHPAML 只实现了 HAML 的一小部分,DMSL 目前还在实验阶段,但已经支持大部分 HAML 以及调用 Python 代码,不过不支持 Markdown 或 Textile。显然,目前还没有一个能支持所有必要功能的 Ruby HAML 替代品。

撰写回答