【问题标题】:Mako for python用于 python 的 Mako
【发布时间】:2012-03-03 22:06:02
【问题描述】:

我是 mako 的新手,想从模板 .py 脚本以编程方式创建 .py 脚本。像这样的工作也是如此

假设我的模板脚本有一个变量var1 = ${var1},它接受整数值。我希望能够使用var1 变量的特定值创建许多副本。我如何创建一个将var1 声明为列表的调用者,比如var1 = [1,2,3,4] 并遍历这些值并将它们传递给模板。如何做到这一点,像render(**locals()) 这样的工作吗?

我也无法下载 Mako,有没有 windows python 2.7 下载可用?

【问题讨论】:

    标签: python mako


    【解决方案1】:

    一旦你有了一个模板对象,你就可以遍历你需要的值并使用render 方法来获得新的输出,如下所示:

    from mako.template import Template
    
    template = Template('var1 = ${var1}')
    
    for v in range(1, 5):
        context = {'var1': v}
        print template.render(**context)
    

    示例输出:

    var1 = 1
    var1 = 2
    var1 = 3
    var1 = 4
    

    关于使用locals() 的想法,那肯定行得通:

    for var1 in range(1, 5):
        print template.render(**locals())
    

    无论如何,我更喜欢显式创建上下文字典。这与 zen of python 一致,即显式优于隐式。

    最后,关于安装问题,我不知道有没有可用的二进制文件,但是您可以使用pip 安装,如mako download page 中所述。

    【讨论】:

    • 谢谢,请详细说明上下文和**上下文的作用
    • 当我说 **locals 时传入的是什么,是当前本地范围内的所有变量,所以如果我从脚本中运行它,脚本中定义的所有变量基本上都是?非常感谢。
    • 当您使用**context 时,字典对会扩展,就好像该方法像template.render(var1=v) 一样被调用。欲了解更多信息,请查看此related question
    • 当您使用locals 时,local symbol table 中的所有变量都会被传递。在上面的示例中,类似于:{'var1': 4, 'template': <mako.template.Template object at 0x7fb5870860d0>, '__builtins__': <module '__builtin__' (built-in)>, '__file__': 'test.py', '__package__': None, 'Template': <class 'mako.template.Template'>, '__name__': '__main__', '__doc__': None}。尽管这样可行,但我并不喜欢它,因为您传递的变量比模板需要的多。
    猜你喜欢
    • 2011-11-15
    • 2012-06-14
    • 2017-09-16
    • 1970-01-01
    • 2012-02-20
    • 2021-04-19
    • 1970-01-01
    • 2013-01-17
    • 2011-02-10
    相关资源
    最近更新 更多