【问题标题】:how to use eval() in python mako templating如何在 python mako 模板中使用 eval()
【发布时间】:2014-03-19 00:46:52
【问题描述】:

在 python 中,可以使用 eval('dyn_var_name') 动态创建变量名称。
我想在我的 mako 模板中执行此操作,但示例代码如下:

from mako.template import Template
print Template("hello ${eval('data{}'.format(0))}!").render(data0="world")

返回NameError: name 'data0' is not defined,即。变量名仍然是一个字符串'data0',并且不对应于适当的键名data0eval() 还没有完成它的工作。如何去完成这个?

提前谢谢

【问题讨论】:

    标签: python eval mako


    【解决方案1】:

    您可以使用pageargs 字典而不是eval 来做到这一点:

    from mako.template import Template
    print Template("hello ${pageargs['data{}'.format(0)]}!").render(data0="world")
    

    但是,从您的示例看来,您可能有一堆变量,每个变量都命名为 data0data1data2 等。为什么不将它们作为列表传递,而不是像许多类似命名的那样传递变量?比如:

    `Template("hello ${data[0]}!").render(data=["world"])`)
    

    另见keep data out of your variable names

    【讨论】:

    • 是的,我确实有 data0、data1、data2 等。虽然我同意这将是一种更好的方法,但它需要重写一段我不想碰的更大的代码除非必要。您的解决方案运行良好,谢谢!
    猜你喜欢
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    • 2011-10-14
    • 2014-03-07
    • 2012-01-01
    • 2021-04-19
    • 2011-09-20
    相关资源
    最近更新 更多