我有以下情况:
>我们在服务器端使用web2py
>我们正在提供一些ember.js页
>当前,这些ember.js页面位于iframe中,因为是ember.js and web2py conflict with template {{ }} marks.这意味着我们无法轻松地将web2py模板和ember.js模板混合使用.
>因此,我已经实现了助手类解决方案:em(DIV)类
>现在,我想处理原始的带有ember标签的html文件,并生成带有em标签的文件,将ember.js和web2py模板系统集成到一个内聚单元中.
为此,我需要将ember.js文件中所有{{XXX}}的实例更改为{{= em(‘XXX’)}},包括跨越多行的实例.我正在考虑在这里使用正则表达式,但我想避免重新发明*(并且必须处理奇怪的拐角处的情况)
您能想到python中解析此类模板的通用方法吗?只需查找开始和结束定界符({{和}}),然后放置= em(‘XXX’),处理换行符并保留格式(即如果有的话保留换行符)就可以了. .
注意:这实际上不是ember.js特有的;它可以应用于任何基于多行定界符的模板系统.
解决方法:
请注意,在web2py的主干版本(将在未来几天内以web2py 2.0发行)中,您现在可以为模板指定自定义分隔符-这样就可以更改web2py分隔符,以使其不再与余烬冲突. js定界符.例如,在模型文件中:
response.delimiters = ['{%', '%}']
然后,在您的web2py模板中,您可以执行以下操作:
{%=P('hello world')%}
<p>{{ember template code}}</p>
{%=P('{{ember template code generated by web2py}}')%}
会产生:
<p>hello world</p>
<p>{{ember template code}}</p>
<p>{{ember template code generated by web2py}}</p>
请注意,对每个请求都设置了response.delimiters,因此,如果您不想更改所有页面上的web2py分隔符,而只更改包含余烬代码的页面,则可以有条件地设置response.delimiters(可以通过在特定操作中进行设置)需要它,或者通过检查模型文件中请求的控制器和/或功能).例如,在模型文件中:
if request.function in ['action1', 'action2', 'action3']:
response.delimiters = ['{%', '%}']
或在控制器中:
def action1():
response.delimiters = ['{%', '%}']
[etc.]