博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mako模板系统(一)
阅读量:5111 次
发布时间:2019-06-13

本文共 1853 字,大约阅读时间需要 6 分钟。

python中的模板系统比较多,我比较喜欢用的是mako。

 

mako模板的功能

 

变量取代:

 

${}

 

在里面可以执行python内建的函数,以及通过模板Context传递过来的变量取代,受jsp等影响。

 

过滤器(文档说是 Expression Escaping-表达式转义)

 

在变量取代中 | 来表示过滤,内建 u-URL escaping, h-HTML escaping, x-XML escaping,以及trim四个过滤器。

 

结构控制

有if/else/elif, while/for, try/except,用%开头,用%end<name>结尾,name为表达式名称,与python一样,需要尾部添加:来表示一个表达式开始,但缩进不是必须的。

由于%被特殊使用,所有想要表达%,得用%%

 

注释

 

和其他语言一样,有单行和多行注释,单行用##,多行用<%doc></%doc>

 

换行过滤器

 

\在一行的结尾,表示下一行也是这一行的内容,连接上下两行内容为一行内容。

 

here is a line that goes onto \another line. 等价:
here is a line that goes onto another line.

 

Python块

mako支持python代码块,用<%开始,用%>结束

this is a template<%    x = db.get_resource('foo')    y = [z.element for z in x if x.frobnizzle==5]%>% for elem in y:    element: ${
elem}% endfor

 

 上面的一个变形是模块级别的支持,用<%!开始

 

<%!    import mylib    import re    def filter(text):        return re.sub(r'^@', '', text)%>

注意,此处需要纯的python代码

 

标签

类似XML,用%开头,用/结束或者显示的结束标签

 

<%include file="foo.txt" />

<%def name="foo" buffered="True">

  this is a def

</%def>

 

所有的tag有各自的属性,大部分属性支持evaluation,这表示你可以在属性文本中使用${}

<%include file="/foo/bar/${myfile}.txt" />

 

下面为所有tag

 

<%page>

  每个模板中仅能使用一个<%page>标签,剩下的会被忽略。

 

<%include>

  包含一个文件,然后将文件render出来,include可以包含参数

<%include file="toolbar.html" args="current_section='members', username='ed" />

 

<%def>

      定义一个python函数,可以被其他的模板调用

  <%def name="myfunc(x)">

    this is myfunc, x is ${x}

  </%def>

 

<%block>

  类似%def,可以匿名,从Jinja2中的block中引用过来

 

<%namespace>

  等价于python的import语句,可以用来render函数以及模板文件源数据,python模块等。

 

<%inherit>

  允许模板构成继承链,当构成inherit时,控制首先运行inherit部分模板。

 

<%nsname:defname>

  任何用户定义的名字,类似于<%call>的行内调用

 

<%call>

  比上面的<%nsname:defname>要复杂

 

<%doc>

  多行注释

 

<%text>

  挂起mako语法分析,返回整个文本,通常用来编写文档时使用

 

 

从模板中快速返回

    有时候想要停止处理模板或者<%def>,在python的block中使用return语句。

 

%if not len(records):

     no records found.

  <% return %>

%endif

<%

  if not len(records):

    return

%>

 

 

 

 

 

转载于:https://www.cnblogs.com/ubunoon/archive/2012/07/27/2611524.html

你可能感兴趣的文章
【深度学习】caffe 中的一些参数介绍
查看>>
QML学习笔记之一
查看>>
WPF中实现多选ComboBox控件
查看>>
【ul开发攻略】HTML5/CSS3菜单代码 阴影+发光+圆角
查看>>
IO—》Properties类&序列化流与反序列化流
查看>>
Codeforces 719B Anatoly and Cockroaches
查看>>
关于TFS2010使用常见问题
查看>>
程序员的数学
查看>>
聚合与组合
查看>>
ionic2+ 基础
查看>>
Screening technology proved cost effective deal
查看>>
Thrift Expected protocol id ffffff82 but got 0
查看>>
【2.2】创建博客文章模型
查看>>
Jsp抓取页面内容
查看>>
大三上学期软件工程作业之点餐系统(网页版)的一些心得
查看>>
可选参数的函数还可以这样设计!
查看>>
Java语言概述
查看>>
关于BOM知识的整理
查看>>
使用word发布博客
查看>>
面向对象的小demo
查看>>