创建一个引擎,用python中的json对象替换模板条目
我想用python创建一个引擎,用json中的对象替换模板文件中的标记?我曾经研究过使用正则表达式的基于python的引擎,但是它们太复杂了,我有点困惑于如何开始尝试。任何启动代码都会有帮助 示例json文件创建一个引擎,用python中的json对象替换模板条目,python,json,template-engine,Python,Json,Template Engine,我想用python创建一个引擎,用json中的对象替换模板文件中的标记?我曾经研究过使用正则表达式的基于python的引擎,但是它们太复杂了,我有点困惑于如何开始尝试。任何启动代码都会有帮助 示例json文件 { "webbpage": { "title": "Stackoverflow" }, "Songs": { "name": "Mr Crowley" }, "CoverArtists": [ { "name": "Ozzy", "nicknam
{
"webbpage": {
"title": "Stackoverflow"
},
"Songs": {
"name": "Mr Crowley"
},
"CoverArtists": [
{ "name": "Ozzy", "nicknames": ["Ozzman","Ozzster"] },
{ "name": "Slipknot", "nicknames": ["Slip"] }
]
}
示例模板文件
<html>
<head>
<title><%% webbpage.title %%></title>
</head>
<body>
<h1><%% Songs.name %%></h1>
<%% EACH CoverArtists artist %%>
<%% artist.name %%>
<%% EACH CoverArtists.nicknames nickname %%>
<p><%% nickname %%></p>
<%% END %%>
<%% END %%>
</body>
</html>
基本上,变量在和之间标识,循环在和之间标识,基本上输出html,因此基本上您需要在
中标识标记。此步骤可通过以下方式完成,例如:
>>重新导入
>>>t=''
>>>重新搜索(r'',t).groups()
(‘Songs.name’,)
解析由此产生的代码是一项相当复杂的任务,您可能会在或中找到一些帮助。即使您需要在整个项目中使用正则表达式,我建议您看看这些以及其他语言的示例,以了解语法解析器是如何工作的
解析语言后,下一步是用json中的值替换标记。最好的方法是首先将数据加载到python dict中,然后编写一个渲染器将数据插入html
即使你不能使用它们,你仍然应该看看一些模板引擎,比如or,并研究它们的源代码,以了解这样一个项目是如何组合在一起的。查看Alex Mitchells on templating(基于python的),它非常有帮助,还有相关的GIT
基本上
我有一个基于Alex mitchells engine的版本,我已经修复了原始版本的一些问题(并将其放入我自己的一些代码中),并且将尝试摆脱基于reg-exp的匹配,并放入上下文匹配,因为正则表达式在大型复杂HTML数据上工作得不太好 为什么不使用现有的发动机,例如?另外,如果您是用python编写的,那么使用python数据结构不是更有意义吗?我正在尝试学习模板制作,我需要自己编写它来学习模板制作和正则表达式概念的本质。:)请您详细介绍一下python数据结构的使用。谢谢
>>> import re
>>> t='<h1><%% Songs.name %%></h1>'
>>> re.search(r'<%%(.+?)%%>', t).groups()
(' Songs.name ',)