这两天在整理一个爬虫数据导出的项目,用到的框架是bottle,话说bottle自带的那个模板,太搓了,而且在一些小页面项目上,不能夹在python的逻辑。    有用过jinja2 的朋友,知道他有个叫做filter的过滤器的东西。python独立的模板,我用过jinja2和mako,看了下文档说,jinja2的filter在bottle里面貌似有问题,我自己也没尝试,也懒得测试了。  看老外用mako,我也就用mako作为bottle的模板引擎了。

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:&nbsp;${task['start_time'].strftime(‘%Y-%m-%d’)}</span>
            <br>
            <span>end:&nbsp;${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模块 。



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!
{ 2000人qq大群内有各厂大牛,常组织线上分享及沙龙,对高性能及分布式场景感兴趣同学欢迎加入该QQ群 }

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!
暂无相关产品