Jinja2: Ищу помощника по видам - PullRequest
0 голосов
/ 11 июля 2010

Я новичок в шаблонизаторе Jinja2. Есть ли что-то вроде помощников вида из Zend Framework? Могу ли я создавать простые функции и повторно использовать их во всех моих шаблонах?

Как то так?

#somewhere in my python code:
def nice_demo_function(message):
    """"return a simple message"""
    return message

Так что я могу использовать это:

<!-- now in my template-file -->
{%  nice_demo_function('yes, this works great!') %}

Ответы [ 2 ]

3 голосов
/ 11 июля 2010

Существует несколько способов предоставления вспомогательных функций вашим шаблонам. Вы можете определить их, используя макросы , а затем импортировать их в шаблоны, которые их используют. Вы можете добавить функции к атрибуту globals ваших объектов Template или передать их методу render () . Вы можете создать подкласс Template для того же, не повторяя каждый раз. Если вы хотите стать действительно модным, вы можете также написать extensions (но вам, вероятно, не нужно углубляться)

2 голосов
/ 12 июля 2010

В какой-то момент вы создадите среду Jinja2.У среды есть атрибут, называемый фильтрами, который определяет, как сопоставлять имена с функциями.Итак, что вы хотите сделать:

def my_helper(value):
  return "-~*#--- %s ---#*~-" % value

env = Jinja2.Environment(...)
env.filters['my_helper'] = my_helper

Теперь в вашем шаблоне вы можете сделать:

<p>The winner is {{ winner | my_helper }}</p>

И ваша функция будет вызываться со значением переменной, в этом случаеwinner.Если вы используете пилоны, все это происходит в config/environment.py.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...