2011-01-12 2 views
5

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

КРОМЕ, когда я на самом деле пытаюсь использовать {% autoescape верно%} тег, я получаю сообщение:

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 

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


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

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.

+0

Я только что заметил, что тэг автозаполнения jinja2 не работает, как описано в рамке tipfy. Это заставляет меня думать, что это ошибка в jinja2, а не проблема с тем, как я ее использую. –

ответ

8

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

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

Спасибо. Я думал, что могу просто импортировать расширение с инструкцией import в верхней части скрипта и не понял, что мне нужно установить расширение как параметр, когда я создавал экземпляр среды. Я полагаю, что абзац в верхней части документации для расширений (http://jinja.pocoo.org/extensions/) с заголовком «Добавление расширений» должен был быть мертвой поддавки. :-) –

+0

На самом деле в чем смысл autoescape и зачем использовать? – Virbhadrasinh

Смежные вопросы