将Django的模板引擎移植到C语言

san*_*dra 10 c python django templates django-templates

我最近为我的C++应用程序(QT)编写了一个简单而小巧的嵌入式HTTP服务器,我和Ry的http解析器一起玩了一下并喜欢它.这家伙很疯狂.

所以我告诉自己:"嘿!为什么不将django模板引擎移植到C?" 那真棒!我知道,这不是一件容易的事(根本不是,我知道),但我真的很想实现这一点.所以我来到这里寻求灵感,想法,意见......

我真的很想对这个主题,想法,已经完成的事情,我将遇到的哪些主要问题(以及如何解决它们)提出一些指示 - 如何不重新发明轮子......无论如何,你有了这个想法:)

万分感谢!

PS简单的代码片段,以及工具和库的链接是非常受欢迎的!

PPS我已经知道了grampe,我看了看它的来源.嗯...这是C++,它特定于Qt.

ape*_*arr 6

嗯,我不明白为什么django模板代码中的任何东西都难以在C中实现.模板语法看起来有点pythonic,但它实际上并不是python; 他们为它实现了自己的解析器.所以首先要看的是python中django模板实现.这真的不是很多代码,而且它很容易理解.

当然,C会更加冗长.你正在编写的只是一个编译器:它读入一些代码(django模板)并用另一种语言(html)写出一些代码.因此,您可以找到有关在C中编写编译器的所有文档(即标记符+解析器+代码生成器)是相关的.

首先,您可能希望生成语法树.django模板的语法是非常规则的...每个{% whatever %}块都有一个相应的{% endwhatever %}块,所以你的解析器实际上可以生成树而不知道所有whatever关键字可能是什么.

然后,您遍历树,为每个块执行"代码生成"阶段.例如,您可以{% if %}通过检查if参数的值来打开codegen ,并打印其内容或不打印任何内容,具体取决于if子句是true还是false.等等while循环,过滤器,块等.

请注意,这一切都是很多工作......你是否考虑过在你的C程序中嵌入一个python解释器?(说真的!这并不难,因为python解释器是开源的.)


ajg*_*ajg 5

如果它有用,Synth框架具有在 C++ 中对 Django 模板系统的完整独立重新实现。它包括所有内置标签和过滤器以及对自定义标签的支持;除了库本身之外,还有 Python 绑定以及本地命令行工具,该工具可以从任意来源(如 JSON、INI 或 XML)读取数据。