【问题标题】:What are "contexts" in Mako?Mako 中的“上下文”是什么?
【发布时间】:2012-03-04 15:20:59
【问题描述】:

python 中的上下文是什么,特别是**context 是什么意思?这是一种在当前上下文中传递变量的方法吗?一个代码示例将不胜感激。

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

【问题讨论】:

  • context 这个词在 Python 中有多种用途(例如 decimal 上下文和上下文管理器)。您需要为问题提供更多的上下文。
  • 无论如何,所有这些都与** 运算符没有任何关系,它只是将字典作为关键字提供给函数的语法。
  • 好的,谢谢,这个怎么样
  • from mako.template import Template template = Template('var1 = ${var1}') for v in range(1, 5): context = {'var1': v} print template.render (**上下文)
  • 当然,请原谅我的无知,我真的很想了解在这种情况下传递 **context 的作用。我知道你在说什么,但我试图理解这个 sn-p。

标签: python mako


【解决方案1】:

** 运算符出现在函数调用中时,会将字典转换为函数的一组关键字参数。当它出现在函数定义中时,它将一组关键字参数转换为函数到字典中。比如:

>>> d = {'a':0, 'b':1, 'c':2}
>>> def print_my_arguments(**my_arguments):
...     print my_arguments
... 
>>> print_my_arguments(a=0, b=1, c=2)
{'a': 0, 'c': 2, 'b': 1}
>>> print_my_arguments(**d)
{'a': 0, 'c': 2, 'b': 1}

【讨论】:

  • @user1247384,这有帮助吗?还是尼克斯的回答?很高兴知道这个问题是否得到回答。
【解决方案2】:

在您的情况下,您作为 kwarg 传递给 render 的任何内容都会作为 Context 传递给您的模板以进行渲染。

上下文表示渲染时页面/模板可用的数据字典。所以当你做类似的事情时

 context = {'var1': v}

你的模板有类似的代码

$(var1)

它会打印 v

Mako 通过查看 Context 解决了这个问题,它只是包装了一个 _data 和通过 render 传递给它的 kwargs。

【讨论】:

  • 需要注意的是,这不是特定于模板的。这是一个被大量使用的 Python 功能,在这种特殊情况下,显式提供关键字而不是为其构造单独的 dict 会更明智。
  • 正确的 kwargs/** 不是模板,但 context 是。
猜你喜欢
  • 2012-03-09
  • 2012-08-27
  • 2021-01-16
  • 2014-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
相关资源
最近更新 更多