- 浏览: 1305806 次
- 性别:
- 来自: 江苏
最新评论
-
honey_fansy:
的确,不要自己的支持就说完美支持,我的就不行,别说我的不是fi ...
无js实现text-overflow: ellipsis; 完美支持Firefox -
fanchengfei:
事件长微博,欢迎转发:http://weibo.com/332 ...
《在路上 …》 写代码也需要一点演技 – python2.6 的 class decorator -
blued:
没有报错,但排版效果一点都没有 咋回事。请指教
python排版工具 -
szxiaoli:
耍人呀,效果在哪儿呀
滑动效果 -
accaolei:
这个能监到控子目录吗?,我测试了一下,发现子目录里的文件监控不 ...
windows监控目录改动
pylons mako笔记
1.
在pylons中设置为utf-8编码
在pylons工程config/environment.py文件最后,添加
tmpl_options['mako.default_filters'] = ['decode.utf8']
2.
${}中间直接是python代码,显示其返回值
this is x: ${x}
pythagorean theorem: ${pow(x,2) + pow(y,2)}
3.
${"this is some text" | u}
u : url编码this+is+some+text
h : html编码
x : xml编码
trim : whitespace trimming, provided by string.strip()
n : disable all default filtering; only filters specified in the local expression tag will be applied.
自定义filter
<%!
def myescape(text):
return "<TAG>" + text + "</TAG>"
%>
Heres some tagged text: ${"text" | myescape}
Or from any Python module:
<%!
import myfilters
%>
Heres some tagged text: ${"text" | myfilters.tagfilter}
默认过滤器
<%page expression_filter="h"/>
Escaped text: ${"<html>some html</html>"}
可以在配置中定义默认的filter
t = TemplateLookup(directories=['/tmp'],
default_filters=['unicode', 'myfilter'],
imports=['from mypackage import myfilter']
禁用其他,只用trim
${'myexpression' | n, trim}
函数也可以用
<%def name="foo()" filter="h, trim">
<b>this is bold</b>
</%def>
4.
控制语句
% 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代码
<%
x = db.get_resource('foo')
y = [z.element for z in x if x.frobnizzle==5]
%>
模块级别的代码
<%!
import mylib
import re
def filter(text):
return re.sub(r'^@', '', text)
%>
5.
单行注释
## this is a comment.
多行注释
<%doc>
these are comments
more comments
</%doc>
6.
标签
包含,可以有变量
<%include file="foo.txt"/>
<%include file="/foo/bar/${myfile}.txt"/>
定义类似函数html文本段
${account()}
<%def name="account()">
Account for ${username}:<br/>
% for row in accountdata:
Value: ${row}<br/>
% endfor
</%def>
定义该页模板的参数
<%page cached="True" cache_type="memory"/>
名字空间
<%namespace file="functions.html" import="*"/>
<%namespace name="mystuff" file="mystuff.html"/>
${mystuff.somedef(x=5,y=7)}
The <%namespace> tag also supports some of the other semantics of Python's import statement, including pulling names into the local variable space, or using * to represent all names, using the import attribute:
<%namespace file="mystuff.html" import="foo, bar"/>
继承
## base.html
<html>
<body>
<div class="header">
${self.header()}
</div>
${self.body()}
<div class="footer">
${self.footer()}
</div>
</body>
</html>
<%def name="footer()">
this is the footer
</%def>
this is the body content.
也可以用
${next.body()}
表示下一级继承页面
用
${parent.toolbar()}
访问上一层
----------------------------------
## index.html
<%inherit file="base.html"/>
<%def name="header()">
this is some header content
</%def>
纯文本
<%text filter="h">
heres some fake mako ${syntax}
<%def name="x()">${x}</%def>
</%text>
8.
函数更多用法演示:
缓存
<%def name="somedef()" buffered="true">
somedef's results
</%def>
----------------------------------
${account(accountname='john')}
<%def name="account(accountname, type='regular')">
account name: ${accountname}, type ${type}
</%def>
----------------------------------
嵌套函数
<%def name="mydef()">
<%def name="subdef()">
a sub def
</%def>
im the def, and the subcomopnent is ${subdef()}
</%def>
----------------------------------
调用者
<%def name="buildtable()">
<table>
<tr><td>
${caller.body()}
</td></tr>
</table>
</%def>
<%call expr="buildtable">
I am the table body.
</%call>
输出
<table>
<tr><td>
I am the table body.
</td></tr>
</table>
----------------------------------
<%def name="lister(count)">
% for x in range(1,count):
${caller.body()}
% endfor
</%def>
<%call expr="lister(3)">
hi
</%call>
输出
hi
hi
hi
----------------------------------
<%def name="conditional(expr)">
% if expr:
${caller.body()}
% endif
</%def>
<%call expr="conditional(4==4)">
im the result
</%call>
----------------------------------
<%def name="layoutdata(somedata)">
<table>
% for item in somedata:
<tr>
% for col in item:
<td>${caller.body(col=col)}</td>\
% endfor
</tr>
% endfor
</table>
</%def>
<%call expr="layoutdata([[1,2,3],[4,5,6],[7,8,9]])" args="col">
Body data: ${col}
</%call>
输出:
<table>
<tr>
<td>Body data: 1</td><td>Body data: 2</td><td>Body data: 3</td>
<td>Body data: 4</td><td>Body data: 5</td><td>Body data: 6</td>
<td>Body data: 7</td><td>Body data: 8</td><td>Body data: 9</td>
</tr>
</table>
----------------------------------
<%def name="layout()">
## a layout def
<div class="mainlayout">
<div class="header">
${caller.header()}
</div>
<div class="sidebar">
${caller.sidebar()}
</div>
<div class="content">
${caller.body()}
</div>
</div>
</%def>
## calls the layout def
<%call expr="layout">
<%def name="header()">
I am the header
</%def>
<%def name="sidebar()">
<ul>
<li>sidebar 1</li>
<li>sidebar 2</li>
</ul>
</%def>
this is the body
</%call>
输出
<div class="mainlayout">
<div class="header">
I am the header
</div>
<div class="sidebar">
<ul>
<li>sidebar 1</li>
<li>sidebar 2</li>
</ul>
</div>
<div class="content">
this is the body
</div>
</div>
1.
在pylons中设置为utf-8编码
在pylons工程config/environment.py文件最后,添加
tmpl_options['mako.default_filters'] = ['decode.utf8']
2.
${}中间直接是python代码,显示其返回值
this is x: ${x}
pythagorean theorem: ${pow(x,2) + pow(y,2)}
3.
${"this is some text" | u}
u : url编码this+is+some+text
h : html编码
x : xml编码
trim : whitespace trimming, provided by string.strip()
n : disable all default filtering; only filters specified in the local expression tag will be applied.
自定义filter
<%!
def myescape(text):
return "<TAG>" + text + "</TAG>"
%>
Heres some tagged text: ${"text" | myescape}
Or from any Python module:
<%!
import myfilters
%>
Heres some tagged text: ${"text" | myfilters.tagfilter}
默认过滤器
<%page expression_filter="h"/>
Escaped text: ${"<html>some html</html>"}
可以在配置中定义默认的filter
t = TemplateLookup(directories=['/tmp'],
default_filters=['unicode', 'myfilter'],
imports=['from mypackage import myfilter']
禁用其他,只用trim
${'myexpression' | n, trim}
函数也可以用
<%def name="foo()" filter="h, trim">
<b>this is bold</b>
</%def>
4.
控制语句
% 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代码
<%
x = db.get_resource('foo')
y = [z.element for z in x if x.frobnizzle==5]
%>
模块级别的代码
<%!
import mylib
import re
def filter(text):
return re.sub(r'^@', '', text)
%>
5.
单行注释
## this is a comment.
多行注释
<%doc>
these are comments
more comments
</%doc>
6.
标签
包含,可以有变量
<%include file="foo.txt"/>
<%include file="/foo/bar/${myfile}.txt"/>
定义类似函数html文本段
${account()}
<%def name="account()">
Account for ${username}:<br/>
% for row in accountdata:
Value: ${row}<br/>
% endfor
</%def>
定义该页模板的参数
<%page cached="True" cache_type="memory"/>
名字空间
<%namespace file="functions.html" import="*"/>
<%namespace name="mystuff" file="mystuff.html"/>
${mystuff.somedef(x=5,y=7)}
The <%namespace> tag also supports some of the other semantics of Python's import statement, including pulling names into the local variable space, or using * to represent all names, using the import attribute:
<%namespace file="mystuff.html" import="foo, bar"/>
继承
## base.html
<html>
<body>
<div class="header">
${self.header()}
</div>
${self.body()}
<div class="footer">
${self.footer()}
</div>
</body>
</html>
<%def name="footer()">
this is the footer
</%def>
this is the body content.
也可以用
${next.body()}
表示下一级继承页面
用
${parent.toolbar()}
访问上一层
----------------------------------
## index.html
<%inherit file="base.html"/>
<%def name="header()">
this is some header content
</%def>
纯文本
<%text filter="h">
heres some fake mako ${syntax}
<%def name="x()">${x}</%def>
</%text>
8.
函数更多用法演示:
缓存
<%def name="somedef()" buffered="true">
somedef's results
</%def>
----------------------------------
${account(accountname='john')}
<%def name="account(accountname, type='regular')">
account name: ${accountname}, type ${type}
</%def>
----------------------------------
嵌套函数
<%def name="mydef()">
<%def name="subdef()">
a sub def
</%def>
im the def, and the subcomopnent is ${subdef()}
</%def>
----------------------------------
调用者
<%def name="buildtable()">
<table>
<tr><td>
${caller.body()}
</td></tr>
</table>
</%def>
<%call expr="buildtable">
I am the table body.
</%call>
输出
<table>
<tr><td>
I am the table body.
</td></tr>
</table>
----------------------------------
<%def name="lister(count)">
% for x in range(1,count):
${caller.body()}
% endfor
</%def>
<%call expr="lister(3)">
hi
</%call>
输出
hi
hi
hi
----------------------------------
<%def name="conditional(expr)">
% if expr:
${caller.body()}
% endif
</%def>
<%call expr="conditional(4==4)">
im the result
</%call>
----------------------------------
<%def name="layoutdata(somedata)">
<table>
% for item in somedata:
<tr>
% for col in item:
<td>${caller.body(col=col)}</td>\
% endfor
</tr>
% endfor
</table>
</%def>
<%call expr="layoutdata([[1,2,3],[4,5,6],[7,8,9]])" args="col">
Body data: ${col}
</%call>
输出:
<table>
<tr>
<td>Body data: 1</td><td>Body data: 2</td><td>Body data: 3</td>
<td>Body data: 4</td><td>Body data: 5</td><td>Body data: 6</td>
<td>Body data: 7</td><td>Body data: 8</td><td>Body data: 9</td>
</tr>
</table>
----------------------------------
<%def name="layout()">
## a layout def
<div class="mainlayout">
<div class="header">
${caller.header()}
</div>
<div class="sidebar">
${caller.sidebar()}
</div>
<div class="content">
${caller.body()}
</div>
</div>
</%def>
## calls the layout def
<%call expr="layout">
<%def name="header()">
I am the header
</%def>
<%def name="sidebar()">
<ul>
<li>sidebar 1</li>
<li>sidebar 2</li>
</ul>
</%def>
this is the body
</%call>
输出
<div class="mainlayout">
<div class="header">
I am the header
</div>
<div class="sidebar">
<ul>
<li>sidebar 1</li>
<li>sidebar 2</li>
</ul>
</div>
<div class="content">
this is the body
</div>
</div>
评论
8 楼
zuroc
2008-12-25
生成的代码有问题 ,生成的代码应该类似
for k,v in unreview.items():
# SOURCE LINE 28
write('<h2>')
write(filters.html_escape(str(k)))
我看你生成的代码(u'\r%f
都有个"\r"做为开头
我怀疑是换行的问题,
保存为linux的换行看看
for k,v in unreview.items():
# SOURCE LINE 28
write('<h2>')
write(filters.html_escape(str(k)))
我看你生成的代码(u'\r%f
都有个"\r"做为开头
我怀疑是换行的问题,
保存为linux的换行看看
7 楼
frankli
2008-12-25
${newinfo}
newinfo输出是(('6a526661d18a11dd898b0017317ff943', 'clsid1'), ('6a526662d18a11ddb8af0017317ff943', 'clsid2'))
%for x in newinfo:
%if x != "":
<b>${x[0]}</b><br>
%else:
<b>nothing</b>
%endif
%endfor
这个里面的newinfo是tuple的,我输出的时候他提示类型(我故意写错他会提示转型错误,所以我确认是tuple的);
newinfo输出是(('6a526661d18a11dd898b0017317ff943', 'clsid1'), ('6a526662d18a11ddb8af0017317ff943', 'clsid2'))
%for x in newinfo:
%if x != "":
<b>${x[0]}</b><br>
%else:
<b>nothing</b>
%endif
%endfor
这个里面的newinfo是tuple的,我输出的时候他提示类型(我故意写错他会提示转型错误,所以我确认是tuple的);
6 楼
frankli
2008-12-25
我输入查看提示是tuple,我用LIST转后还是提示是这个错误,
__M_writer(escape(newinfo))
__M_writer(u'\r%for i in range(1,10):\r ')
__M_writer(escape(i))
__M_writer(u'\r%endfor \r\r\r<br>\r<br>\r<
这个是生成的模模版代码;提示本行的i没有定义.
__M_writer(escape(newinfo))
__M_writer(u'\r%for i in range(1,10):\r ')
__M_writer(escape(i))
__M_writer(u'\r%endfor \r\r\r<br>\r<br>\r<
这个是生成的模模版代码;提示本行的i没有定义.
5 楼
zuroc
2008-12-24
估计里面有个东西既不是空字符串,也不是tuple
4 楼
zuroc
2008-12-24
1.开启缓存
2.看生成的代码
2.看生成的代码
3 楼
frankli
2008-12-24
${newinfo}
newinfo输出是(('6a526661d18a11dd898b0017317ff943', 'clsid1'), ('6a526662d18a11ddb8af0017317ff943', 'clsid2'))
%for x in newinfo:
%if x != "":
<b>${x[0]}</b><br>
%else:
<b>nothing</b>
%endif
%endfor
报错:TypeError: 'Undefined' object is unindexable
这是以前的代码,有结束符的,我测试${x}就输出全是字会串,如果${x[0]}就是上面的报错;
我找了两天了还没有找到问题。麻烦您给指点一下。谢谢。
newinfo输出是(('6a526661d18a11dd898b0017317ff943', 'clsid1'), ('6a526662d18a11ddb8af0017317ff943', 'clsid2'))
%for x in newinfo:
%if x != "":
<b>${x[0]}</b><br>
%else:
<b>nothing</b>
%endif
%endfor
报错:TypeError: 'Undefined' object is unindexable
这是以前的代码,有结束符的,我测试${x}就输出全是字会串,如果${x[0]}就是上面的报错;
我找了两天了还没有找到问题。麻烦您给指点一下。谢谢。
2 楼
zuroc
2008-12-24
for ... :
1 楼
frankli
2008-12-24
您好,我安装了Mako-0.2.3+pylons-dev-15206414f9ff,但是在MAKO模版文件里控制语句
%for i in range(1,10)
${i}
%endfor
这个一直是输出是字符串,找了好久也没有解决这个问题.不知道能否抽时间交流一下.谢谢.
QQ52522835/frankli.sh@gmail.com
%for i in range(1,10)
${i}
%endfor
这个一直是输出是字符串,找了好久也没有解决这个问题.不知道能否抽时间交流一下.谢谢.
QQ52522835/frankli.sh@gmail.com
发表评论
-
关于"Google限制Python"事件我的看法
2009-11-17 15:11 8370本来做一个勤勤恳恳的 ... -
python排版工具
2009-10-15 14:22 3508http://pypi.python.org/pypi/pyt ... -
Fast Asynchronous Python Web Server (Fapws is short)
2009-08-15 12:12 1862http://github.com/william-os4y/ ... -
python奇技淫巧
2009-07-23 22:27 2511http://wiki.python.org/moin/By ... -
跨平台 获取系统信息的python库 http://support.hyperic.com/disp
2009-06-12 11:49 3644The Sigar API provides a portab ... -
频繁集统计 python 封装
2009-05-29 15:49 2664封装的是附件这篇paper的count 因为对比发现这个的综合 ... -
libsvm (python封装) 学习笔记 1
2009-05-19 14:28 42432009-05-19 14:10:38 #!/usr/bin ... -
lcs.py 最长公共子串算法
2009-05-05 15:50 2978感觉用来匹配相似文件比最短编辑距离更靠谱,最短编辑应该是用来纠 ... -
lrucache.py 最近最少使用算法
2009-05-04 13:23 2914lrucache.py 最近最少使用算法 2009-05-04 ... -
史上最快 异步消息队列zeromq 简介
2009-04-30 21:40 27273是的,我喜欢Z开头的东西. http://www.zer ... -
相似单词
2009-03-18 00:54 1771给你一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词 ... -
is_cn_char
2009-03-14 13:39 1347unicode码 def is_cn_char(i): ... -
写一个python的urldecode
2009-03-03 10:57 5119from urllib import unquote def ... -
今天才发现python的sort有个key参数,我好圡...
2009-02-28 20:59 3100>>> a=range(10) >& ... -
发一个山寨版python的Orm
2009-02-24 23:49 2241发一个山寨版的Orm 大概用法见 http://docs. ... -
pyrex学习笔记
2009-02-24 03:36 17030. easy_install pyrex 1.写pyrex ... -
python的一个有趣的细节
2009-02-24 02:00 1374python3.0一个有趣的细节 2009-02-24 01: ... -
python备玩候选者
2009-02-24 00:34 1706* 张沈鹏 推荐网址当然要有一个部署的东西 Exs ... -
python读取mp3 ID3信息
2009-02-18 16:57 2650pyid3不好用,常常有不认识的. mutagen不错,不过 ... -
又写了一个python的route模块
2009-01-14 01:18 2100是的 我很无聊
相关推荐
Mako模板通常被用于Web开发框架,如Pylons、Pyramid和Gunicorn等,用于生成动态网页内容。同时,由于其强大的文本处理能力,Mako也被用于生成各种类型的文档,如报告、邮件、配置文件等。 **安装与集成** 对于这个...
Mako 可以很好地与其他 Python Web 框架集成,如 Flask、 Pyramid 和 Pylons 等。例如,在 Flask 中,你可以这样配置 Mako: ```python from flask import Flask from flask_mako import MakoTemplates app = ...
pylons默认的模板就是用的它;相比而言,Django 内建的模板引擎,为了维持所谓模板语法的纯粹性和简单性,更纯粹的满足 MVC 模式的规定,牺牲了很多灵活性,一些高级的功能不得不利用 tag 和 filter 来实现,其写法...
6. **模板引擎支持**:Pylons支持多种模板引擎,如Mako、Genshi和Jinja2,使开发者可以根据需求选择合适的模板语言来渲染视图。 7. **强大的社区支持**:Pylons拥有活跃的社区,提供丰富的文档、教程和第三方插件,...
9. **与Web框架的集成(Integration with Web Frameworks)**:Mako与其他Python Web框架如Pylons、Pyramid、Flask和Django等有很好的集成,可以直接在这些框架中使用Mako模板。 在解压Mako-0.7.0.tar.gz后,你会...
5. **模板系统**:介绍了Pylons支持的几种模板引擎,如Mako、Genshi等,并展示了如何使用它们构建动态网页。 6. **数据库集成**:讨论了Pylons与SQLAlchemy等ORM工具的集成方法,以及如何利用这些工具进行高效的...
6. **模板引擎**:介绍Pylons常用的模板语言,如Mako或Jinja2,以及如何在视图中使用它们。 7. **模型与数据库**:探讨ORM(对象关系映射)工具,如SQLAlchemy,以及如何设计和操作数据库模型。 8. **错误处理与...
根据提供的文件信息,我们可以推断出这是一本关于Pylons框架的技术书籍,作者是James Gardner,出版于2008年。以下是对该书的关键知识点进行的详细解读。 ### 关键知识点概述 #### 1. **Pylons 框架简介** - **...
In this book, cofounder and lead developer James Gardner brings you a comprehensive introduction to Pylons, the web framework that uses the best of Ruby, Python, and Perl and the emerging WSGI ...
在Python Web开发中,Pylons是一个轻量级、高性能的框架,它以其高度可定制性而受到开发者喜爱。Pylons采用MVC(Model-View-Controller)设计模式,允许开发者灵活选择不同的库来实现各个层的功能。在本例子中,我们...
资源来自pypi官网。 资源全名:Pylons-0.8.2-py2.3.egg
笔记定向塔已与repoze.bfg合并,并且现在处于仅维护模式。 强烈建议新项目从新的合并的Web框架。安装。 如果要从源代码安装,可以运行以下命令: $ python setup.py install 如果尚未安装该模块,它将显示一条消息...
Gardner -- The Definitive Guide to Pylons -- 2008 -- code.7z
Pyramid 是一款现代 Python Web 开发框架,作为 Pylons 框架的升级版本,它不仅继承了原有框架的优点,还进行了诸多改进与增强。根据提供的文件描述,我们可以提炼出以下几个关键知识点: 1. **Pyramid 的独特之处*...
可用于UnityVR开发,3D游戏开发,高清天空盒子Skybox素材,游戏环境背景素材,无水印。 让你身临其境的天空盒子,各类题材丰富,都是辛苦搜罗所得的高清exr格式,可以直接用于Unity开发,特别是VR游戏的开发。...
它是Pylons框架的进化版,旨在提供更加轻量级、模块化且易于扩展的解决方案,以满足现代Web应用的需求。在本文中,我们将深入探讨Pyramid 1.2的源码,理解其核心概念,并探索如何构建基于Pyramid的应用。 **一、...