2011-03-04 2 views
8

J'utilise python google app engine avec le framework webapp, en substituant des templates jinja2 pour les templates django.Est-il possible d'accéder à la clé nom d'un objet à l'intérieur d'un template jinja2?

Je sais que vous pouvez obtenir le key_name d'un objet à l'intérieur d'une méthode de gestionnaire en l'appelant comme ceci:

goody = object.key().name() 

Mais est-il possible d'accéder au key_name à partir de la logique du modèle? Quelque chose comme ça?

{% for object in objectList %} 
{{object|key_name}} 
{% endfor %} 

Il est évident que cela ne fonctionne pas, mais est-il un filtre ou un attribut caché que je peux utiliser pour obtenir au moteur app key_name un objet est stocké avec à l'intérieur du modèle sans tripoter supplémentaire dans la méthode de gestionnaire?

Répondre

7

Jinja2 vous permet d'exécuter appelables, en utilisant simplement () selon la documentation ici: http://jinja.pocoo.org/docs/templates/#other-operators

Donc, cela devrait fonctionner:

{% for instance in instance_list %} 
    {{ instance.key().name() }} 
{% endfor %} 
+0

Je jure que j'ai déjà essayé ça et ça n'a pas marché. Mais j'ai dû me tromper, parce que j'ai essayé maintenant et ça marche bien. Suivi, y a-t-il des frais généraux pour ces appelables? Serais-je mieux de stocker la valeur dans un attribut séparé si je dois le faire pour beaucoup d'objets? –

+0

Dépend, les appels de fonction sont l'une des opérations les plus coûteuses en Python. Si c'est un morceau de code chaud, alors vous feriez mieux de les stocker avant la main d'une manière intelligente pour éviter d'exécuter des fonctions. Si cela ne se fait pas souvent, alors ça va. Faites attention à l'optimisation prématurée :) –

2

Vous pouvez faire object.key.name à l'intérieur modèle de django pour accéder datastore AppEngine objet nom clé

Normalement, vous accédez à nom clé en code python à travers object.key().name()

Le modèle Django essaie automatiquement plusieurs façons d'interpréter object.key.name pour vous donner la valeur.

Questions connexes