2011-03-04 4 views
8

Używam silnika aplikacji python google ze środowiskiem webapp, zastępując szablony jinja2 szablonami django.Czy jest możliwy dostęp do nazwy_funktu obiektu z wnętrza szablonu jinja2?

Wiem, że można uzyskać KEY_NAME obiektu od wewnątrz metody handler nazywając go tak:

goody = object.key().name() 

ale jest to możliwe, aby uzyskać dostęp do KEY_NAME z poziomu logiki szablonu? Coś takiego?

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

Oczywiście, że nie działa, ale jest tam jakiś filtr lub ukryty atrybut mogę użyć, aby uzyskać w silniku aplikacji KEY_NAME obiekt jest przechowywany wraz z wnętrza matrycy bez dodatkowego fiddling wewnątrz metody handler?

Odpowiedz

7

Jinja2 pozwala wykonać callables, tylko za pomocą () zgodnie z dokumentacją tutaj: http://jinja.pocoo.org/docs/templates/#other-operators

Tak, to powinno działać:

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

Przysięgam, że próbowałem tego wcześniej i nie zadziałało. Ale musiałem zrobić coś złego, ponieważ próbowałem teraz i działa dobrze. Kontynuacja, czy istnieje jakiś napływ tych kalambur? Czy lepiej byłoby przechowywać wartość w oddzielnym atrybucie, jeśli muszę to zrobić dla wielu obiektów? –

+0

Zależy, wywołania funkcji są jedną z najdroższych operacji w Pythonie. Jeśli jest to gorący fragment kodu, lepiej byłoby przechowywać go przed ręką w inteligentny sposób, aby uniknąć wykonywania funkcji. Jeśli to nie jest często wykonywane, to jest w porządku. Uważaj na przedwczesną optymalizację :) –

2

Można zrobić object.key.name wewnątrz szablonu django dostęp do AppEngine datastore nazwa obiektu nazwa klucza

Zazwyczaj dostęp do nazwa klucza w kodzie Pythona przez object.key().name()

Szablon Django automatycznie próbuje na kilka sposobów interpretować object.key.name, aby uzyskać wartość.