2016-09-06 45 views
8

Moja Jinja kontekst najwyższego poziomu jest zmienne zdefiniowane w sekwencji jak foo_0, foo_1 itpDynamicznie uzyskać zmienną (od sznurku) w Jinja

Chciałbym mieć dostęp do tych zmiennych dynamicznie generując ciągi o kodzie takim jak "foo_" + str(0).

Jeśli chcesz uzyskać efekt, chcę zrobić coś takiego, jak {{ eval("foo_0") }} w moim szablonie Jinji i uzyskać dostęp do tych zmiennych w kolejności.

Czy to możliwe?

Uwaga: Używam usługę cloud Nie kontrolnych (co zapewnia Jinja templating), a więc:

  • nie mogę użyć struktur danych w kontekście Jinja (wszystkie wartości zmiennej musi być smyczki).
  • Nie mogę dostosować środowiska wykonawczego Jinja lub dodawać filtrów. Ale byłoby pomocne wiedzieć, czy można to rozwiązać, dodając niestandardowy filtr.
+0

Ten problem jest naprawdę mnie irking! "Wszystkie zmienne muszą być ciągami" to naprawdę to, co do mnie dociera. Jeśli mógłbyś po prostu przekazać jedną funkcję z dekoratorem ['contextfunction'] (http://jinja.pocoo.org/docs/2.9/api/#jinja2.contextfunction), byłoby to proste! –

Odpowiedz

0

nie udało mi się znaleźć standard/udokumentowany sposób to zrobić, ale poprzez wywiercenie:

In [30]: Template("{{ self._TemplateReference__context.resolve('foo_0') }}").render(foo_0='this_is_foo_0', foo_1='this_is_foo_1') 
Out[30]: 'this_is_foo_0'