加载中…
博文
标签:

mako

it

分类: python
Loop Context是mako中用于跟踪for循环状态的一种机制,使用好它可以在写循环时建设不少代码量。例如 

<ul>
% for a in ('one', 'two', 'three'):
    <li>Item ${loop.index}: ${a}</li>
% endfor
</ul> 

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

mako

it

分类: python
Context是mako中的一个重要概念,负责模板与外界所有的数据传递。在模板中,我们可以用变量context来访问它。Context由两个重要组成部分组成,一个是类似StringIO的输出缓存buffer,另一个是存储参数(render参数、built-in参数等)的字典,该字典中的所有参数都可以直接在模板中使用。

from mako.template import Template
from mako.runtime import Context
from StringIO import StringIO

mytemplate = Template('hello, ${name}!')
buf = StringIO()
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

mako

it

分类: python
二、命名Block

1. 命令Block的使用

相对匿名block,命名block的用途更广泛,不过命名block也有一些特有的属性,我们先来看看一段常用的代码:

<html>
<%block name='header'>
    <head>
        <title>
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

mako

it

分类: python
 除了函数,mako还提供了一种特殊的结构 — Block。在很大程度上,Block跟Def非常相似,但作为模板,需要构建灵活多变的页面结构,Block又有着一些Def所不具备的特殊特性。

一、匿名Block的使用

block跟def最大的一个区别就是def在定义之后需要专门去调用它才会生效,block不需要,block定义之后就会默认在该定义处生效渲染。正因为这种特性,block就可以匿名使用。例如:

<html>
    <body>
        <%block>
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

mako

it

分类: python
九、def的其他的调用方式

mako中的函数不仅仅是函数,还有一种模板特有的调用方式。我们经常使用它来创建自定义标签:

1. 自定义标签

<def name='buildtable()'>
    <table>
        <tr><td>
            ${caller.body()}
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

mako

it

分类: python
 八 、mako中def的一些特定参数

前面我们就提到过,mako的函数是一种增强性的函数,除了可以往函数中传递参数之外,还可以为该函数定义一些额外的参数。例如,

1. cache

我们可以为一个mako函数单独定义一个cache,设定cache过期时间。

<def name='somedef()'cached='True' cache_timeout='60'>
<%
    import time
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

mako

it

分类: python

五、调用其他模板中的函数

mako也能支持调用其他模板中的函数,因此,多个函数可以集合成一个mako函数库。不过mako仅支持顶层函数的跨模块调用,而且需要通过namespace标签来引入,例如,在mystuff.html中定义了一个函数account:

<%namespace name='mystuff' file='mystuff.html'/> 

如上定义之后,就可以使用

${mystuff.account()}

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

mako

it

分类: python
跟python一样,在mako中,也可以用def来定义一个函数。不过在功能上,mako中的def比python稍微强大一点。


一、函数定义

在mako中,使用<def>来定义一个函数。注意,这里函数名需要表示成name参数的值。

<def name='hello()'>
    hello world
</def> 

定义完函数之后,就可以在模板中直接调用该函数:

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

mako

pyramid

babel

it

分类: python
为了支持国际化,在python程序中,经常需要使用Babel将语言相关的字符串抽取出来,形成pot文件。而在mako模板文件中,有大量的文本性内容需要国际化处理,因此,mako必须要支持Babel的抽取功能。

一、mako字符串的简单抽取

在mako中,使用了一个名为mako.ext.babelplugin的Babel抽取插件,正确安装Babel、mako后,就可以使用pybabel命令进行字符串抽取。

首先,我们创建一个a.html文件,内容为:


  Name:
  ${_('Francois Pinard')}


阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

mako

it

分类: python
mako源码的example目录里有一个run_wsgi.py文件,是一个简单的的wsgi程序,它的主要功能就是以templates或htdocs目录作为根目录,启动一个简单的wsgi服务,该服务读入GET或POST中的参数,以及PATH_INFO作为模板文件名,然后将GET/POST的参数均放入模板context中进行模板渲染,因此,该功能可以在没有程序支持的情况下单独调试模板。

不过该程序有两个小问题:
1. 32行的 return [template.render(**d)] 最好改成return [template.render_unicode(**d).encode(‘utf-8’)],然后以utf-8格式输出。有些场景下,不转码会报错。

2. 对于非html文件,它的是读取run_wsgi.py同级目录的,这在项目中一般不合适,因此
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
个人资料
EryxLee
EryxLee
  • 博客等级:
  • 博客积分:0
  • 博客访问:51,455
  • 关注人气:9
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
分类
评论
加载中…
  

新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有