2012-03-03 3 views
2

Je suis un débutant pour mako et je veux créer des scripts .py à partir d'un modèle de script .py. Donc, quelque chose comme ce travailMako pour python

Disons que mon script de modèle a une variable var1 = ${var1}, qui prend des valeurs de nombre entier. Je veux être en mesure de créer de nombreuses copies avec des valeurs particulières de var1 variable. Comment créer un appelant qui déclare var1 sous la forme d'une liste, par exemple var1 = [1,2,3,4] et parcourir les valeurs et les transmettre au modèle. Comment fait-on cela, est-ce que quelque chose comme render(**locals()) fonctionne?

Également je suis incapable de télécharger Mako, y at-il un téléchargement de Windows Python 2.7 disponible?

Répondre

3

Une fois que vous avez un objet de modèle, vous pouvez simplement parcourir les valeurs dont vous avez besoin et utiliser la méthode render pour obtenir la nouvelle sortie comme suit:

from mako.template import Template 

template = Template('var1 = ${var1}') 

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

Exemple de sortie:

var1 = 1 
var1 = 2 
var1 = 3 
var1 = 4 

En ce qui concerne l'idée d'utiliser locals(), cela fonctionnerait certainement:

for var1 in range(1, 5): 
    print template.render(**locals()) 

Quoi qu'il en soit, je préfère créer explicitement le dictionnaire de contexte. Ceci est cohérent avec le zen of python qui stipule que explicite est meilleur qu'implicite.

Enfin, en ce qui concerne le problème d'installation, je ne connais aucun binaire disponible, mais vous pouvez installer en utilisant pip comme expliqué dans le mako download page.

+0

Merci, pouvez-vous élaborer sur le contexte et le contexte ** –

+0

Aussi ce qui se passe quand je dis ** locaux, est-ce que toutes les variables dans la portée locale actuelle, donc si je cours ceci d'un script , toutes les vars définies dans le script essentiellement? Merci beaucoup. –

+0

Lorsque vous utilisez '** context', les paires de dictionnaire sont développées comme si la méthode s'appelait' template.render (var1 = v) '. Pour plus d'informations, consultez cette [question connexe] (http://stackoverflow.com/q/1769403/183066). – jcollado