`
san_yun
  • 浏览: 2655126 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

简单体验python mako

 
阅读更多
django自带的模板用着不爽,准备替换成python Mako,这也是豆瓣使用的模板语言。

1. 环境准备
直接使用pip,如果不知道什么是pip,会死的很惨

sudo pip install Mako
sudo pip install django-mako


2. 一个简单的例子
from mako.template import Template

mytemplate = Template("hello world!")
print mytemplate.render()

和java的模板系统大同小异,加上context:
from mako.template import Template

mytemplate = Template("hello, ${name}!")
print mytemplate.render(name="jack")


这里render方法会自动创建Context对象,也可以自己创建Context:
from mako.template import Template
from mako.runtime import Context
from StringIO import StringIO

mytemplate = Template("hello, ${name}!")
buf = StringIO()
ctx = Context(buf, name="jack")
mytemplate.render_context(ctx)
print buf.getvalue()


3. 基于文件的Templates
上面的例子中,Template是通过字符串的方式构建的,下面将介绍通过文件:
from mako.template import Template

mytemplate = Template(filename='/docs/mytmpl.txt')
print mytemplate.render()


4. 语法

a. 表达式,和jsp,velocity很像:
this is x: ${x}

但比velocity智能,数学运算很方便有木有:
${pow(x,2) + pow(y,2)}
the contents within the ${} tag are evaluated by Python directly, so full expressions are OK.
还有比java先进的,看看这个:
${"this is some text" | u}

| 后面这个u是什么意思?

Mako 内置了多个escaping filter ,包括 HTML, URL, XML escaping,trim(),这些filter可以通过| 后面跟表达式来表示。

    u : URL escaping, provided by urllib.quote_plus(string.encode('utf-8'))

    h : HTML escaping, provided by markupsafe.escape(string)

    x : XML escaping

    trim : whitespace trimming, provided by string.strip()

    entity : produces HTML entity references for applicable strings, derived from htmlentitydefs

    unicode (str on Python 3): produces a Python unicode string (this function is applied by default)

    decode.<some encoding> : decode input into a Python unicode with the specified encoding

    n : disable all default filtering; only filters specified in the local expression tag will be applied.

多个filter通过逗号间隔:
${" <tag>some value</tag> " | h,trim}

上面这段code将被解析成: &lt;tag&gt;some value&lt;/tag&gt; 更多: http://docs.makotemplates.org/en/latest/filtering.html

b. 流程控制

% if x==5:
    this is some output
% 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



c. python block:
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

更多参考:http://docs.makotemplates.org/en/latest/syntax.html

5. 最后说说和django集成问题

1)在你django项目的settings.py中的MIDDLEWARE_CLASSES里增加一项djangomako.middleware.MakoMiddleware例:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'djangomako.middleware.MakoMiddleware',
    )

添加django方法,例:

from djangomako.shortcuts import render_to_response
def hello_view(request):
    return render_to_response('hello.html', {'name':'sand'})

启动你的django项目,浏览器访问一下http://yourhostname/hello,看下是不是看到返回的hello sand!


http://www.sandzhang.com/blog/2010/04/03/install-mako-templates-and-plugin-for-django/
分享到:
评论

相关推荐

    Python于Web_2.0网站的应用

    5. **前端交互**:Python的Ajax库如jQuery和requests库,使得前后端交互更加流畅,实现页面无刷新更新,提升用户体验。 6. **爬虫与数据抓取**:Python的BeautifulSoup、Scrapy等库使得数据抓取变得容易,对于Web ...

    python购物商城管理系统

    "Python购物商城管理系统"就是利用Python编程语言构建的一个简单版的电子商务平台。这个系统可能包括用户管理、商品展示、购物车、订单处理等基本功能,为用户提供了一个便捷的在线购物体验。 1. **用户模块** - ...

    Python库 | jam.py-2.0.3.tar.gz

    版本2.0.3是这个库的一个稳定版本,包含了一系列改进和修复,以增强其功能和用户体验。 在Python开发中,库如`jam.py`扮演着至关重要的角色,它们提供了丰富的预定义函数和模块,使得开发者能够避免重复造轮子,...

    Python-Mail-Merge-Project:Python的第24天-100天

    总的来说,"Python-Mail-Merge-Project"是一个综合性的学习体验,涵盖了数据处理、模板引擎应用、电子邮件通信等多个Python编程领域的核心概念。通过这个项目,你将能够构建出一个功能完善的邮件合并系统,从而提升...

    Python-easystore是web2py模型的电子商务其它存储平台的支持框架

    5. **模板与视图**:基于 web2py 的 Mako 模板引擎,easystore 提供了一系列预定义的视图,帮助开发者快速构建商店页面,如产品展示、购物车、结账等页面。 6. **库存管理**:对于商品库存的跟踪和管理,easystore ...

    Bottle+两个仪表盘刷新数据

    Bottle是一个轻量级的Python Web服务器和框架,适用于开发简单的单进程Web应用。它的核心特性包括路由、模板渲染、HTTP请求处理等。在这个项目中,Bottle用于接收和响应HTTP请求,处理数据并渲染仪表盘页面。 2. *...

    PyPI 官网下载 | jinjaform-0.5.1-py2.py3-none-any.whl

    总的来说,`JinjaForm`是`Jinja2`的一个有力补充,它使得在Python Web应用中处理表单变得简单高效。无论是新手还是经验丰富的开发者,都可以从中受益,提高开发效率。通过下载并安装`jinjaform-0.5.1-py2.py3-none-...

    webpy-0.62.rar

    在WebPy中,视图通常是一个Python函数,该函数返回HTML模板,这些模板可以使用内置的模板引擎或第三方模板库如Mako或Jinja2来创建。 3. **控制器(Controller)**:控制器是模型和视图之间的桥梁,处理HTTP请求并调用...

    PyPI 官网下载 | tornado_battery-0.5.5.tar.gz

    Tornado Battery的出现,是为了进一步优化Tornado的使用体验,为开发者提供更多的便利性。 首先,我们来了解Tornado Battery的核心特性: 1. **路由管理**:Tornado Battery提供了更高级的路由系统,支持动态路由...

    bottle document

    - **兼容多种模板**:除了内置模板引擎外,还支持 Mako、Jinja2 和 Cheetah 等流行模板引擎的集成。 - **动态内容生成**:用户可以轻松地在模板中插入动态数据,从而生成 HTML 页面。 ##### 2.3 实用工具 ...

    Tekito-WEB:WEB版

    Python提供了多种数据库适配器,如SQLAlchemy和psycopg2,使得与数据库的操作变得简单。 4. RESTful API:现代Web应用往往需要提供REST(Representational State Transfer)风格的API,以实现前后端分离或与其他...

    ecommerce_sabhyata

    10. **数据分析与推荐系统**:Python的数据分析库如Pandas、NumPy和SciPy可用于处理大量业务数据,而机器学习库如Scikit-learn、TensorFlow或PyTorch可能被用于构建个性化推荐系统,提高用户体验和转化率。...

    天气应用

    为了使应用运行起来,我们需要将所有代码组织成一个可执行的Python程序,然后使用内置的服务器模块(如Bottle自带的wsgiref简单服务器)启动应用。这一步通常在`weather-app-main.py`这样的主文件中完成。 总的来说...

    Shtriher:ean13(вразработке)сайтпосозданиюпростыхэтикетокскодом

    5. **用户界面**:为了提供友好的用户体验,开发者可能会利用Bootstrap或其他前端框架来构建响应式布局和表单元素,便于用户输入产品信息。 6. **数据库集成**:如果网站需要保存用户的标签设计或生成的历史记录,...

    simple-blog-engine

    "simple-blog-engine" 是一个基于 Python 的简单博客引擎项目,旨在提供一个轻量级、易于理解和自定义的平台,用于创建个人或小型团队的博客系统。这个项目可能包含了一个基本的后端框架、数据库模型、前端模板以及...

    hostifi-mvp

    4. **模板引擎**:对于用户界面,Python的Jinja2或Mako可以用来创建动态HTML页面,结合CSS和JavaScript提供交互式体验。 5. **认证与授权**:考虑到网络服务,项目可能需要用户身份验证和权限管理。Python有如Flask...

    manos

    总的来说,Manos是一个面向Python开发者的小巧且灵活的Web框架,它的目标是提供一种直接、高效的开发体验,而不是强制使用一套完整的解决方案。如果你是一个喜欢对Web应用有完全控制权的开发者,或者正在寻找一个...

    fbdemo:基本烧瓶服务器

    【fbdemo:基本烧瓶服务器】是一个基于Python开发的简单Web服务器应用,它使用了微型Web框架Bottle。Bottle是一个轻量级、快速且易于使用的框架,适合开发小型到中型的Web应用程序。在深入理解fbdemo之前,我们先来...

    blog.bottlepy.org:瓶装开发博客

    在Bottle中,你可以使用简单的装饰器来定义路由规则。例如,`@get('/blog')` 将GET请求的/blog路径绑定到一个处理函数。 模板渲染是创建动态HTML页面的关键。Bottle支持多种模板引擎,如Mako和Jinja2,但默认使用的...

    瓶项目

    "瓶项目"是一个基于Python的轻量级Web框架,它以简洁、高效为设计原则,适合快速开发小型或中型的Web应用。在本项目中,我们主要关注HTML标签的使用,这在构建Web页面时至关重要。HTML(HyperText Markup Language)...

Global site tag (gtag.js) - Google Analytics