2012-12-03 16 views
5

Próbuję uzyskać dostęp do elementów dyktowania za pomocą klawiszy rozpoczynających się od znaku podkreślenia. Na przykład:Dostęp do elementów dyktujących z wiodącymi podkreśleniami w szablonach Django

my_dict = {"_source": 'xyz'}

Próbuję uzyskać do nich dostęp w szablonie Django. Oczywiście zdaję sobie sprawę, że nie można uzyskać dostępu do podkreślonych zmiennych Pythona z szablonu Django (ponieważ są one uważane za prywatne w Pythonie), ale jest to obiekt dict, w którym każdy niezmienny obiekt jest prawidłowym kluczem.

Nie mogę uzyskać dostępu do powyższego dicta w szablonie Django za pomocą {{my_dict._source}}, więc zakładam, że Django temu zapobiega. Czy to jest dokładne?

Mam nadzieję, że Django zrobi coś normalnego ze zmiennymi, które zaczynają się od podkreślenia, np. Wciąż poszukuje dict (pierwsza rzecz ma rzekomo próbuje), ale odmawia wykonania wyszukiwania atrybutów, wywołań metod i indeksowania list indeksów od podkreślonej zmiennej prefiksowanej byłby nieprawidłowy. Szybko tracę jednak nadzieję.

Dla przypomnienia, wiem, że ktoś zasugeruje zmianę dyktatu, ale w rzeczywistości jest to wielopoziomowy słownik zwracany przez bibliotekę surowców podczas wykonywania żądania API REST w instancji ElasticSearch.

+0

Jeśli jest to rzeczywiście django można utworzyć niestandardowy tag szablonu, aby powrócić prywatny var. – Colleen

+0

wyszukiwanie w google "django template underscore vars" ujawnia: https://groups.google.com/forum/?fromgroups=#!topic/django-users/J8c0j2_iEcc - tzn. Tak, musisz utworzyć niestandardowy szablon etykietka. Chociaż wątek jest stary, wątpię, aby ta funkcjonalność się zmieniła. – Colleen

+0

To nie jest prywatny var, jest to całkowicie legalny klucz dyktujący, coś, co powinno być dostępne przy pomocy wyszukiwania dyktującego. Naprawdę próbuję uniknąć tworzenia tagu szablonu. Zwłaszcza, że ​​obiekty dict mogą stać się dość głębokie jak {{my_dict.hits._source._text}}. – rstuart85

Odpowiedz

11

The docs mention że nie można mieć zmienną tarczą znaku podkreślenia:

Nazwy zmiennych muszą składać się z dowolnej litery (AZ), każda cyfra (0-9), podkreślenia (ale nie muszą one zacznij od podkreślenia) lub kropki.

ale można łatwo napisać custom template filter naśladować słownika za get metody:

@register.filter(name='get') 
def get(d, k): 
    return d.get(k, None) 

i

{{ my_dict|get:"_my_key" }} 
+0

Dzięki za rozwiązanie! Rozpocząłem pracę nad pakietem w celu zebrania użytecznych filtrów podkreślenia. Wspominam o tobie. https://github.com/halfnibble/django-underscore-filters –

Powiązane problemy