Каковы "контексты" в Мако? - PullRequest
0 голосов
/ 04 марта 2012

Что такое контекст в python, в частности, что означает **context?Это способ передачи переменных в текущем контексте?Пример кода будет наиболее ценным.

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

Ответы [ 2 ]

0 голосов
/ 04 марта 2012

Оператор **, когда он появляется в вызове функции, преобразует словарь в набор аргументов ключевого слова для функции.Когда он появляется в определении функции, он преобразует набор ключевых аргументов функции в словарь.Так, например:

>>> 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}
0 голосов
/ 04 марта 2012

В вашем случае все, что вы передаете render как kwarg, передается как Context вашему шаблону для визуализации.

Контекст представляет собой словарь данных, доступных для страницы / шаблона при рендеринге. Поэтому, когда вы делаете что-то вроде

 context = {'var1': v}

и ваш шаблон имеет код типа

$(var1)

Это напечатало бы v

Мако решает эту проблему, глядя на Context, который просто оборачивает _данные с кваргами, переданными ему через render.

...