2015-01-02 7 views
28

Mam słownika Pythona:Sprawdź, czy klucz istnieje w dict Python w Jinja2 szablony

settings = { 
    "foo" : "baz", 
    "hello" : "world" 
} 

Ta zmienna settings jest wtedy dostępny w szablonie Jinja2.

Chcę sprawdzić, czy klucz myProperty istnieje w settings dict w moim szablonu, a jeśli tak, podjąć pewne działania:

{% if settings.hasKey(myProperty) %} 
    takeSomeAction(); 
{% endif %} 

Co jest odpowiednikiem hasKey że mogę używać?

+0

Wystarczy sprawdzić: czy rozliczenie gs [myproperty] is not None: Myślę, że to powinno zadziałać. –

+0

lub jeśli zdefiniowano settings.myproperty: –

Odpowiedz

13

Ten działa dobrze

{% if settings.myProperty %}

+1

Czy 'myProperty' może być zmienną w powyższym podejściu? –

+4

Tak, klucz w słowniku. Jest odpowiednikiem '' hasKey''. I przy okazji, klucz hasKey jest przestarzały. Użyj '' in'' zamiast –

+11

, gdy setting.myProperty istnieje, ale jest równe zero (liczba całkowita 0) lub wartość logiczna False, to jeśli test nie jest dla 'hasKey'. To znaczy, że potrzebujesz: '' {% if 'myProperty' w ustawieniach%} '' – karelv

66

jak Mihai i karelv zauważyli, to działa:

{% if 'blabla' in item %} 
    ... 
{% endif %} 

dostaję 'dict object' has no attribute 'blabla' jeśli używam {% if item.blabla %} i item nie zawiera blabla klucz

+2

To samo dla mnie. W moim szczególnym przypadku używam Jinja2 wewnątrz Ansible. – chesterbr