在python中创建一个引擎,用json对象替换模板条目

2024-10-01 13:39:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用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


Tags: 文件对象代码name标记引擎ltgt
2条回答

所以基本上你需要识别<%%和{}内的标记。此步骤可使用regular expression完成,例如:

>>> import re
>>> t='<h1><%% Songs.name %%></h1>'
>>> re.search(r'<%%(.+?)%%>', t).groups()
(' Songs.name ',)

解析它给出的代码是一项相当复杂的任务,您可以在shlex或{a3}中找到一些帮助。即使您需要在整个项目中使用正则表达式,我建议您看看这些,以及其他语言的示例,以了解语法分析器是如何工作的。在

解析完该语言后,下一步是用json中的值替换标记。最好的方法是首先将数据加载到python dicts中,然后编写一个呈现器将数据插入到html中。在

即使您不能使用它们,您仍然应该查看一些模板引擎,如jinja或{a5},并研究它们的源代码,以了解这样一个项目是如何组合在一起的。在

查看关于模板(基于python)的alexmitchellsblog,它非常有用,以及相关的GIT here

基本上

  1. 在命令行获取输入文件

  2. 解析模板文件-建立抽象语法树,方便解析。创建一个节点基类型,然后为每个新类型实现一个具体的类

  3. 构建堆栈以跟踪循环,当循环关闭时弹出,查找缺少循环结束的错误

  4. 解析json文件,构建对象字典,映射AST条目并在html中替换

  5. 将输出写入文件。

我有一个基于alexmitchells引擎here的版本,其中我修复了原始引擎的一些问题(并将其放入我自己的一些代码中),并将尝试去除基于reg-exp的匹配并放入上下文匹配中,因为正则表达式在大型复杂的HTML数据上不能很好地工作。在

相关问题 更多 >