2009-12-15 18 views
12

Próbuję przedstawić słownika z mojego view.py w szablonie HTML, takich jak:klucze dict ze spacjami w Django szablony

test = { 'works': True, 'this fails':False } 

i w szablonie:

Działa to bez problemu :

{{ test.works }} 

Ale słownika klucz, który jest posiadające pustą przestrzeń między słowami takimi jak „to się nie powiedzie” nie działa:

{{ test.this fails }} 

otrzymuję ten błąd:

Could not parse the remainder: ' fails' from 'this fails'

Jak mogę rozwiązać ten problem? Nie jestem tym, który wypełnia modele, więc nie mogę zmienić kluczy dyktatury, żeby usunąć spacje.

Odpowiedz

16

Filtr chcesz coś jak

@register.filter(name='getkey') 
def getkey(value, arg): 
    return value[arg] 

i są wykorzystywane

{{test|getkey:'this works'}} 

tak urce: http://www.bhphp.com/blog4.php/2009/08/17/django-templates-and-dictionaries

+0

Nie zapomnij {% wczytać mój filtr%} w szablonie – Ross

+2

@Ross - że połączona strona internetowa powinna pochodzić ze znakiem ostrzegawczym. Załóż okulary przeciwsłoneczne! –

+0

filtr musi pozostać w pliku wewnątrz katalogu templatetags. więcej informacji @ http://stackoverflow.com/questions/3474734/django-custom-template-filter-cant-work –

-4

To nie wygląda dobrze dla mnie. Czy możesz wykonać następujące czynności?

{{ test['works'] }} 
{{ test['this fails'] }} 

W ten sposób działa typ słownika w Pythonie.

+0

Nieważne, przetestowałem go i nie działa. – SapphireSun

+1

Nie można przeanalizować pozostałej części: '[' works ']' from 'test [' works ']' – Hellnar

+0

Tak, uzyskujesz dostęp do wartości słowników przy danym kluczu, używając notacji '.' w szablonach Django. –

2

Nie znam żadnego standardowego rozwiązania w Django. Myślę, że jest to możliwe z filtrem szablonów.

Możesz być zainteresowany w tym artykule http://push.cx/2007/django-template-tag-for-dictionary-access (autor używa szablon termin, ale w rzeczywistości jest to filtr szablon)

Mam nadzieję, że to pomaga

+0

Wygląda na to, że zadziała, ale dla przypomnienia to nie jest tag szablonu, to filtr (wygląda na to, że ten, kto napisał ten artykuł, również popełnił ten błąd). –

+0

masz rację! to jest filtr. Dzięki. Naprawiłem, że – luc