Eurasia/使用标准模板

来自站长百科
跳转至: 导航、​ 搜索

模板:Eurasia top

使用标准模板[ ]

eurasia.template 模块是 Mako 的简化版,带有大部分 Mako 模板的功能,和相同的标签语法。同时也是编译型模板。

template 包涵以下标签语法。

  • 表达式替换
this is x: ${x}

进一步,取值表达式可以嵌入 python 代码,并替换为 python 表达式的运算结果:

${int(a) + int(b)}
  • 控制结构

我们可以在模板中使用条件表达式及叠代循环表达式。这里是条件表达式:

%if x==1:
    x is ${x}
%elif x==2:
    x is ${x}
%else:
    x is ${x}
%endif

这里是循环:

%for a in ['one', 'two', 'three', 'four', 'five']:
    %if a[0] == 't':
        its two or three
    %elif a[0] == 'f':
        four/five
    %else:
        one
    %endif
%endfor
  • python 代码

可以在模板中运行 python 代码:

<% # 这里是 Python 代码
a = 1
b = 2
%>

测试一下 a + b : ${a + b}

第一行(紧跟“<%”之后)的 python 代码的缩进会被忽略,所以请避免使用 def、class、if、for 等依赖缩进的 python 代码。函数中的 python 代码块在当前函数中可见,函数外的代码块在当前模板中全局可见。

  • 函数标签 <%def name="..." %>

函数是模板中最基本的调用单位,类似于 Python 中的函数:

<%def name="myfunc(x)">
    this is myfunc, x is ${x}
</%def>

调用: ${myfunc(7)}
  • <%call expr="..."%> 标签

call 标签用于调用 <%def%> 标签,可传递额外的内嵌内容。

<%namespace> 标签[ ]

eurasia 标准模板中没有 Mako 中 <%namespace> 标签的等价物,这个功能相当于 Python 中的 import。

<%namespace> 需要一系列关于导入路径的配置,这比较复杂,因此 eurasia 换了一种方式。

Template 函数第二个参数可以设定模板中可见的环境。你可以在这里预先导入一些模板中用得到的东西,比如

#!/usr/bin/python2.5
#-*- coding: utf-8 -*-
from eurasia.template import Template
s1 = '''\ # 定义模板宏
<%def name="macros(a, b)">
${caller.slot1(a)}
${caller.slot2(b)}
</%def>'''

s2 = '''\ # 调用模板宏
<%def name="main()">
<%call expr="macros(1, 2)">
  <%def name="slot1(a)">
    slot1, ${a}
  </%def>

  <%def name="slot2(b)">
    slot1, ${b}
  </%def>
</%call>
</%def>'''

tmpl1 = Template(s1)

# 使用 env 参数指定模板环境
tmpl2 = Template(s2, env={'macros': tmpl1.macros})

tmpl2.main()

参考来源[ ]

http://code.google.com/p/eurasia/wiki/eurasia_3_1_userguide

模板:Eurasia