zoukankan      html  css  js  c++  java
  • mako的namespace(四)

    mako的namespace用这个<%namespace>形式处理

    <%namespace file="a.html" import="comp1, comp2" />

    用来导入a.html中的comp1和comp2两个函数,这两个函数用mako的def定义

    可以用属性name来重名该模块,然后用name来引用。函数调用类似python的函数调用。

    同时还有一项强大的功能,就是调用python模块代码,通过属性module来导入python模块,然后用name来引用模块函数

    注意函数必须要至少存在一个context的参数,任何返回值都将被render,因此一般返回''。

    如果需要使用context中的caller对象,需要supports_caller(在mako.runtime中),如下面两种方式

    from mako.runtime import supports_caller
    
    @supports_caller
    def my_tag(context):
        context.write("<div>")
        context['caller'].body()
        context.write("</div>")
        return ''
    from mako.runtime import supports_caller, capture
    
    @supports_caller
    def my_tag(context):
        return "<div>%s</div>" % \
                capture(context, context['caller'].body, x="foo", y="bar")

    在namespace中也支持def,类似模块中def。

    ## define a namespace
    <%namespace name="stuff">
        <%def name="comp1()">
            comp1
        </%def>
    </%namespace>
    
    ## then call it
    ${stuff.comp1()}

    每个namespace中都有一个body函数,一般情况下不接受参数,如果实在需要接受参数,mako推荐通过<%page>标签来接受参数

    <%page args="x, y, someval=8, scope='foo', **kwargs"/>

     当顶层的模板被调用时(通过render或者<%inclue>标签,这些参数值将从Context中传递过来)。**kwargs会从**pageargs中得到参数值。其他情况下,调用body方法是可以传递参数

    当在继承模板时,这个功能将非常有用!

    在namespace中内建的有local和self,local表示当前执行的template,self表示在没有使用继承时和local一样,使用继承时,表示最顶层的template。

    namespace中的inheritable属性为True时,表示可以将namespace部分加载到self的namespace中,那么在所有的继承链中可以访问到该模板信息

    /*
    *
    * Copyright (c) 2011 Ubunoon.
    * All rights reserved.
    *
    * email: netubu#gmail.com replace '#' to '@'
    * http://www.cnblogs.com/ubunoon
    * 欢迎来邮件定制各类验证码识别,条码识别,图像处理等软件
    * 推荐不错的珍珠饰品,欢迎订购 * 宜臣珍珠(淡水好珍珠) */
  • 相关阅读:
    二分图 洛谷P2055 [ZJOI2009]假期的宿舍
    并查集 洛谷P1640 [SCOI2010]连续攻击游戏
    贪心 洛谷P2870 Best Cow Line, Gold
    贪心 NOIP2013 积木大赛
    快速幂 NOIP2013 转圈游戏
    倍增LCA NOIP2013 货车运输
    树形DP 洛谷P2014 选课
    KMP UVA1328 Period
    动态规划入门 BZOJ 1270 雷涛的小猫
    KMP POJ 2752Seek the Name, Seek the Fame
  • 原文地址:https://www.cnblogs.com/ubunoon/p/2611967.html
Copyright © 2011-2022 走看看