проблема с jinja2 autoescape в веб-приложении Google App Engine - PullRequest
5 голосов
/ 13 января 2011

Я решил установить jinja2 для использования с моим приложением webapp для поддержки функциональности autoescape. Поэтому я установил jinja2 в python 2.5 и создал символическую ссылку в своем проекте, чтобы указать на этот каталог. В основном работает нормально.

ЗА ИСКЛЮЧЕНИЕМ, когда я действительно пытаюсь использовать тег {% autoescape true%}, я получаю сообщение:

File "/Users/me/project/templates/_base.html", line 1, in template
    {% autoescape true %}
TemplateSyntaxError: Encountered unknown tag 'autoescape'.

Я использую теги, как они есть в документах:

{% autoescape true %} stuff {{var1}} stuff {{var2}}{% endautoescape %}

В моем файле обработчика я импортирую соответствующие данные:

from jinja2 import Environment, FileSystemLoader, TemplateNotFound
from jinja2.ext import autoescape

И импорт работает нормально, потому что не выдает ошибку. Я делаю что-то не так, или есть проблема с самим jinja2, как, например, в ext.py?


UPDATE: Я попробовал предложение Шарта ниже и получил тот же результат. Вот мой обновленный обработчик, использующий его предложение.

class MainHandler(BaseHandler):
    def get(self):

        self.context['testEscape']='<script type="javascript">alert("hi");</script>'
        env = Environment(loader=FileSystemLoader([os.path.join(os.path.dirname(__file__), 'templates')]), autoescape=False)
        template = env.get_template('index.html')
        content = template.render(self.context)
        self.response.out.write(content)

Опять же, все работает нормально, если я не использую тег autoescape.

1 Ответ

8 голосов
/ 13 января 2011

Для тега {% autoescape %} требуется Jinja 2.4 или выше, и загружено расширение jinja2.ext.autoescape.

env = Environment(autoescape=True, extensions=['jinja2.ext.autoescape'],
                  loader=...)
...