Как зарегистрировать пользовательский фильтр в системе шаблонов Google App Engine? - PullRequest
5 голосов
/ 23 февраля 2011

Согласно документации Django, я зарегистрировал свой фильтр:

from google.appengine.ext.webapp import template
# ...
register = template.create_template_register()
@register.filter(name='wld')
def wld(result):
    if result == 1 : return "win"
    if result == 0 : return "loss"
    if result == 0.5 : return "draw"
    return "unknown"
self.response.out.write(template.render("player.html", template_values))

где-то в шаблоне у меня есть код:
{{result|wld}}

и когда я пытаюсь отобразить свой шаблон, я получаю сообщение об ошибке: TemplateSyntaxError: Invalid filter: 'wld'

Что я делаю не так?

Ответы [ 2 ]

12 голосов
/ 23 февраля 2011

После того, как вы создали свою библиотеку пользовательских тегов, вам нужно зарегистрировать ее с помощью движка шаблонов Django:

from google.appengine.ext.webapp import template
template.register_template_library('path.to.lib')

Обратите внимание, что вызов template.register_template_library - это оболочка, которая предоставляется как часть AppEngine SDK. После того, как вы поместите это в main.py, новые теги или фильтры должны быть доступны во всех ваших шаблонах без дальнейшей работы. Нет необходимости использовать тег {% load %}.

Важное примечание: функционирование register_template_library будет зависеть от того, какую версию Django вы используете в своем приложении AppEngine. Если вы используете 0,96, параметром будет путь к файлу библиотеки пользовательских тегов. Если вы используете Django 1.2, он будет через путь модуля Python к библиотеке пользовательских тегов. Я опубликовал инструкцию по созданию этой работы в своем блоге .

0 голосов
/ 23 февраля 2011

Вам необходимо добавить блок {% load the_name_of_that_module %} в каждый шаблон, который вы планируете использовать этот фильтр.

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