2009-12-15 15 views
12

Ich versuche, ein Wörterbuch von meinem view.py an der HTML-Vorlage wie zu präsentieren:dict Schlüssel mit Leerzeichen in Django Vorlagen

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

und in der Vorlage:

Dies ohne Probleme funktioniert :

{{ test.works }} 

Aber ein Wörterbuch Schlüssel, der einen leeren Raum zwischen den Wörtern wie ‚dieser versagt‘ ist mit nicht funktioniert:

{{ test.this fails }} 

ich diesen Fehler:

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

Wie kann ich dieses Problem zu überwinden? Ich bin nicht derjenige, der die Modelle füllt, also kann ich die Tasten des Diktats nicht ändern, um Leerzeichen zu entfernen.

Antwort

16

Der Filter hilft Ihnen wollen, ist so etwas wie

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

und verwendet mit

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

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

+0

Vergessen Sie nicht, {% Laden Myfilter%} in der Vorlage – Ross

+2

@Ross - diese verlinkte Website sollte mit einem Warnzeichen kommen. Zieh deine Sonnenbrille an! –

+0

Der Filter muss in einer Datei in einem Templatetags-Verzeichnis verbleiben. mehr Infos @ http://stackoverflow.com/questions/3474734/django-custom-template-filter-cant-work –

-4

Das sieht nicht richtig für mich. Können Sie Folgendes tun?

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

So funktioniert Wörterbuchzugriff in Python normalerweise.

+0

Nevermind, ich habe es getestet und es funktioniert nicht. – SapphireSun

+1

Der Rest konnte nicht analysiert werden: '[' works ']' from 'test [' works ']' – Hellnar

+0

Ja, Sie greifen auf Wörterbuchwerte zu, die bei Verwendung von '.' in Django-Vorlagen angegeben wurden. –

2

Ich kenne keine Standardlösung in Django. Ich denke, das ist mit einem Template-Filter möglich.

Sie von diesem Artikel interessiert sein http://push.cx/2007/django-template-tag-for-dictionary-access (der Autor Template-Tag Begriff wird verwendet, aber in der Tat ist es ein Template-Filter)

Ich hoffe, es

+0

Das sieht aus wie es funktionieren würde, aber für die Aufzeichnung, das ist kein a Template-Tag, es ist ein Filter (sieht aus wie jemand, der diesen Artikel geschrieben hat, machte diesen Fehler auch). –

+0

Sie haben Recht! Es ist ein Filter. Vielen Dank. Ich habe das behoben – luc