2013-07-02 10 views

Odpowiedz

1

Zgodnie z dokumentacją można nie dlatego, że zachowanie to cecha: patrz here

Co chciałbym zrobić, to napisać niestandardowy filtr, który zachowuje się w sposób pythonic i podnosi KeyError w sprawie.

Coś, co można wykorzystać mniej więcej tak:

jinja2.Template("Hello {{ a|myget('x') }}").render(a={}) 
+1

Można to zrobić, wybierając prawidłową "niezdefiniowaną" klasę (zobacz moją odpowiedź). – ascobol

7
from jinja2 import Template, StrictUndefined 
print Template("Hello {{ a.x }}", undefined=StrictUndefined).render(a={}) 

to podniesie wyjątek:

File "<template>", line 1, in top-level template code 
jinja2.exceptions.UndefinedError: 'dict object' has no attribute 'x' 

Jeśli ustawisz wartość ax to będzie działać zgodnie z przeznaczeniem :

print Template("Hello {{ a.x }}", undefined=StrictUndefined).render(a={'x':42}) 

będzie pr int:

Hello 42 
Powiązane problemy