2012-03-04 1 views
-2

Qu'est-ce que le contexte en python, en particulier que signifie **context? Est-ce un moyen de passer les variables dans le contexte actuel? Un exemple de code sera le plus apprécié.Que sont les "contextes" à Mako?

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

Le mot 'context' a de multiples utilisations en Python (par exemple, les gestionnaires de contexte et de contexte' decimal'). Vous devrez fournir un peu plus de contexte à la question. – interjay

+1

Dans tous les cas, tout cela n'a rien à voir avec l'opérateur '**', qui est juste la syntaxe pour fournir un dictionnaire en tant que mots-clés à une fonction. –

+0

Ok merci sûr, que diriez-vous –

Répondre

0

Dans votre cas quelque chose que vous passez à render comme kwarg est passé comme un Context à votre modèle afin de rendre.

Le contexte représente un dictionnaire de données disponibles pour la page/le modèle lors du rendu. Donc, quand vous faites quelque chose comme

context = {'var1': v} 

et votre modèle a un code comme

$(var1) 

Il imprimerait v

Mako résout en regardant la Context, qui est juste enveloppe une _data avec le kwargs transmis à travers render.

+0

Il est à noter que ceci n'est pas spécifique aux templates. C'est une fonctionnalité Python qui est beaucoup utilisée, et dans ce cas particulier, il serait beaucoup plus judicieux de fournir explicitement le mot-clé au lieu de construire un dict séparé pour cela. –

+0

Corriger kwargs/'**' n'est pas une chose de modèle, mais le 'contexte' est. – Nix

0

L'opérateur **, lorsqu'il apparaît dans un appel de fonction, convertit un dictionnaire en ensemble d'arguments dans une fonction. Lorsqu'il apparaît dans une définition de fonction, il convertit un ensemble d'arguments mot-clé en une fonction dans un dictionnaire. Par exemple:

>>> 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

@ user1247384, cela vous a-t-il aidé? Ou est-ce que la réponse de Nix? Ce serait bien de savoir si cette question est répondue ou non. – senderle