我有以下场景:
- 我们正在使用web2py http://www.web2py.com在服务器端
- 我们正在服务一些ember.js http://emberjs.com/ pages
- 目前这些 ember.js 页面位于 iframe 内,因为ember.js 和 web2py 与模板 {{ }} 标记冲突 https://groups.google.com/forum/m/#!msg/web2py/-CrviALMVy8/5ly-u8SVnu4J。这意味着我们不能轻易混合 web2py 模板和 ember.js 模板。
- 所以我实现了辅助类解决方案:
class em(DIV)
- 现在我想处理原始的 ember 标记的 html 文件,并生成em 标签文件,将 ember.js 和 web2py 模板系统集成到一个有凝聚力的单元中。
为此,我需要更改所有实例{{XXX}}
在 ember.js 文件中添加到 {{=em('XXX')}},包括跨越多行的实例。我正在考虑在这里使用正则表达式,但我想避免重新发明轮子(并且必须处理奇怪的极端情况)
你能想到 python 中解析此类模板的通用方法吗?这只是寻找开始和结束分隔符的问题({{
and }}
),并把=em('XXX')
, 处理换行符, and 保持格式(也就是说,如果有换行符,则保留换行符)。
注意:这实际上不是 ember.js 特有的;它可以适用于任何基于多行分隔符的模板系统。
请注意,在 web2py 的主干版本(将在接下来的几天内作为 web2py 2.0 发布)中,您现在可以为模板指定自定义分隔符——这样您就可以更改 web2py 分隔符,使它们不再与 ember 冲突。 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 分隔符,而只想更改包含 ember 代码的页面上的 web2py 分隔符,则可以有条件地设置 response.delimiters (通过在特定操作中设置它)需要它,或者通过检查模型文件中请求的控制器和/或功能)。例如,在模型文件中:
if request.function in ['action1', 'action2', 'action3']:
response.delimiters = ['{%', '%}']
或在控制器中:
def action1():
response.delimiters = ['{%', '%}']
[etc.]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)