这两天在整理一个爬虫数据导出的项目,用到的框架是bottle,话说bottle自带的那个模板,太搓了,而且在一些小页面项目上,不能夹在python的逻辑。 有用过jinja2 的朋友,知道他有个叫做filter的过滤器的东西。python独立的模板,我用过jinja2和mako,看了下文档说,jinja2的filter在bottle里面貌似有问题,我自己也没尝试,也懒得测试了。 看老外用mako,我也就用mako作为bottle的模板引擎了。
SimpleTemplate implements the BaseTemplate API: from bottle import SimpleTemplate tpl = SimpleTemplate('Hello {{name}}!') tpl.render(name='World) u'Hello World!' In this document we use the template() helper in examples for the sake of simplicity: from bottle import template template('Hello {{name}}!', name='World') u'Hello World!'
bottle 是支持mako的扩展,说起mako这个模板,他是可以和jinja2 pk的模板,他可以自由的嵌入python逻辑。 这样的方式,有好处也有坏处。好处是方便,坏处就是不利于以后的扩展, 而且代码不干净。
<%
from bottle import request
from admin.config.consts import ROLE
s = request.environ.get(‘beaker.session’)
a = s.get(‘role’, None)
%>
<tr>
<td>下载任务编号</td>
<td>项目/关键词</td>
<td>起止时间</td>
<td>创建时间</td>
<td>状态</td>
% if s.get(‘role’, None) == ROLE.ROOT:
<td>功能</td>
%endif
</tr>
</thead>
<tbody>
% for task in tasks:
<tr id=”row_${task[‘_id’]}” >
<td>${int(task[‘_id’])}</td>
<td>${task[‘filename’].split(‘-‘)[1]}</td>
<td>
<span>start: ${task[‘start_time’].strftime(‘%Y-%m-%d’)}</span>
<br>
<span>end: ${task[‘end_time’].strftime(‘%Y-%m-%d’)}</span>
</td>
<td>${task[‘created_on’].strftime(‘%Y-%m-%d %H:%M’)}</td>
<% from admin.config.consts import DOWNLOAD_STATUS %>
% if task[‘status’] == DOWNLOAD_STATUS.COMPLETED:
<td>已完成 <a href=”/download/file/${task[‘filename’]}” target=’_blank’>点此下载</a></td>
% elif task[‘status’] == DOWNLOAD_STATUS.WAITING:
<td>等待中 </td>
% elif task[‘status’] == DOWNLOAD_STATUS.DELETE:
<td>已删除</td>
% elif task[‘status’] == DOWNLOAD_STATUS.CONTINUE:
<td>继续</td>
% elif task[‘status’] == DOWNLOAD_STATUS.PAUSE:
<td>暂停</td>
% else:
<td>导出中 <td>
上面是个我在项目中的一个例子,大家可以举一反三的玩好mako模块 。