有没有办法将当前作用域中的所有变量作为上下文传递给Mako?

时间:2011-05-16 05:33:37

标签: python templates mako

我有一个像这样的方法:

def index(self):
    title = "test"
    return render("index.html", title=title)

其中render是一个函数,它自动呈现给定的模板文件,其余的变量作为上下文传入。在这种情况下,我将title作为变量传递给上下文。这对我来说有点多余。有没有什么方法可以自动获取index方法中定义的所有变量,并将它们作为上下文的一部分传递给Mako?

2 个答案:

答案 0 :(得分:2)

使用下面给出的技术:

def render(template, **vars):
    # In practice this would render a template
    print(vars)

def index():
    title = 'A title'
    subject = 'A subject'
    render("index.html", **locals())

if __name__ == '__main__':
    index()

运行上述脚本时,会打印

{'subject': 'A subject', 'title': 'A title'}

显示vars字典可以用作模板上下文,就像你这样调用一样:

render("index.html", title='A title', subject='A subject')

如果您使用locals(),它会传递index()函数正文中定义的局部变量以及传递给index()的所有参数 - 例如self一种方法。

答案 1 :(得分:0)

请看这个片段:

def foo():
  class bar:
    a = 'b'
    c = 'd'
    e = 'f'
    foo = ['bar', 'baz']

  return vars(locals()['bar'])

for var, val in foo().items():
  print var + '=' + str(val)

当你运行它时,它会吐出来:

a=b
__module__=__main__
e=f
c=d
foo=['bar', 'baz']
__doc__=None

locals()['bar']块引用类bar本身,vars()返回bar个变量。我不认为你可以通过实时功能来实现它,但是通过一个类似乎可以工作。