3

我有以下情况:

  1. 我们在服务器端使用web2py
  2. 我们正在提供一些ember.js页面
  3. 目前这些 ember.js 页面位于 iframe 中,因为ember.js 和 web2py 与模板 {{ }} 标记冲突。这意味着我们不能轻易混合 web2py 模板和 ember.js 模板。
  4. 所以我实现了辅助类解决方案:class em(DIV)
  5. 现在我想处理原始的带有 ember 标记的 html 文件,并生成带有em 标记的文件,将 ember.js 和 web2py 模板系统集成到一个有凝聚力的单元中。

为此,我需要将{{XXX}}ember.js 文件中的所有实例更改为 {{=em('XXX')}},包括跨越多行的实例。我正在考虑在这里使用正则表达式,但我想避免重新发明轮子(并且不得不处理奇怪的极端情况)

你能想到python中解析这类模板的通用方法吗?只需查找开始和结束分隔符 ( {{and }}),然后放置=em('XXX'),处理换行符保持格式(即,如果有换行符,则保留换行符)。

注意:这实际上不是 ember.js 特定的;它可以应用于任何基于多行分隔符的模板系统。

4

2 回答 2

3

请注意,在 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 代码的页面,您可以有条件地设置 response.delimiters(通过在特定操作中设置它)需要它,或者通过检查模型文件中请求的控制器和/或函数)。例如,在模型文件中:

if request.function in ['action1', 'action2', 'action3']:
    response.delimiters = ['{%', '%}']

或在控制器中:

def action1():
    response.delimiters = ['{%', '%}']
    [etc.]
于 2012-08-26T13:23:21.400 回答
0

可能值得尝试一种方法,将所有 Ember.js 内容保存在单独的文件中,并且不要将其与 web2py 模板混合。幸运的是,Ember.js 很容易做到这一点。

于 2012-08-26T20:28:52.767 回答