2011-03-04 18 views
8

Estoy usando el motor de aplicaciones python google con el framework webapp, sustituyendo plantillas jjanja2 por plantillas django.¿Es posible acceder al key_name de un objeto desde dentro de una plantilla jinja2?

Sé que usted puede conseguir el nombre_tecla de un objeto desde dentro de un método de control llamándolo así:

goody = object.key().name() 

Pero, ¿es posible acceder a la nombre_tecla desde dentro de la lógica de la plantilla? ¿Algo como esto?

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

Obviamente eso no funciona, pero ¿hay algún filtro o atributo que pueda usar para conseguir en el motor de aplicación nombre_tecla se almacena un objeto desde el interior con la plantilla sin tocar el violín adicional dentro del método de control ocultos?

Respuesta

7

Jinja2 le permite ejecutar callables, sólo mediante el uso () según la documentación aquí: http://jinja.pocoo.org/docs/templates/#other-operators

Por lo tanto, esto debería funcionar:

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

Juro que lo intenté antes y no funcionó. Pero debo haber algo mal, porque lo intenté ahora y está funcionando bien. Seguimiento, ¿hay alguna sobrecarga para estos callables? ¿Sería mejor guardar el valor en un atributo separado si necesito hacer esto para muchos objetos? –

+0

Depende, las llamadas a funciones son una de las operaciones más costosas en Python. Si se trata de una pieza de código caliente, sería mejor que los guarde antes de la mano de forma inteligente para evitar la ejecución de funciones. Si esto no se ejecuta a menudo, está bien. Tenga cuidado con la optimización prematura :) –

2

Usted puede hacer object.key.name dentro de plantillas de Django para acceder almacén de datos de Google App Engine nombre de la clave

Normalmente del objeto, se accede a nombre de la clave en código python a través de object.key().name()

La plantilla de Django intenta automáticamente algunas formas posibles de interpretar object.key.name para proporcionarle el valor.

Cuestiones relacionadas