我想用python创建一个引擎,用json中的对象替换模板文件中的标记?我曾经研究过使用regex的基于python的引擎,但它们过于复杂,我有点困惑,不知道如何开始使用它。启动任何代码都会有帮助
json文件示例
{
"webbpage": {
"title": "Stackoverflow"
},
"Songs": {
"name": "Mr Crowley"
},
"CoverArtists": [
{ "name": "Ozzy", "nicknames": ["Ozzman","Ozzster"] },
{ "name": "Slipknot", "nicknames": ["Slip"] }
]
}
示例模板文件
^{pr2}$基本上变量在<;%%和%%>;之间标识,循环在<;%%之间标识。。%%>;和<;%%END%%>;基本上输出html
所以基本上你需要识别}内的标记。此步骤可使用regular expression完成,例如:
<%%
和{解析它给出的代码是一项相当复杂的任务,您可以在shlex或{a3}中找到一些帮助。即使您需要在整个项目中使用正则表达式,我建议您看看这些,以及其他语言的示例,以了解语法分析器是如何工作的。在
解析完该语言后,下一步是用json中的值替换标记。最好的方法是首先将数据加载到python dicts中,然后编写一个呈现器将数据插入到html中。在
即使您不能使用它们,您仍然应该查看一些模板引擎,如jinja或{a5},并研究它们的源代码,以了解这样一个项目是如何组合在一起的。在
查看关于模板(基于python)的alexmitchellsblog,它非常有用,以及相关的GIT here
基本上
在命令行获取输入文件
解析模板文件-建立抽象语法树,方便解析。创建一个节点基类型,然后为每个新类型实现一个具体的类
构建堆栈以跟踪循环,当循环关闭时弹出,查找缺少循环结束的错误
解析json文件,构建对象字典,映射AST条目并在html中替换
将输出写入文件。
我有一个基于alexmitchells引擎here的版本,其中我修复了原始引擎的一些问题(并将其放入我自己的一些代码中),并将尝试去除基于reg-exp的匹配并放入上下文匹配中,因为正则表达式在大型复杂的HTML数据上不能很好地工作。在
相关问题 更多 >
编程相关推荐