2011-01-12 13 views
5

Ho deciso di installare jinja2 da utilizzare con la mia applicazione webapp per supportare la funzionalità autoescape. Così ho installato jinja2 in python 2.5 e creato un collegamento simbolico all'interno del mio progetto per puntare a quella directory. Funziona principalmente bene.problema con jinja2 autoescape nella webapp del motore dell'app google

TRANNE, quando in realtà si tenta di utilizzare il {% autoescape vero%} tag, ottengo il messaggio:

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

sto usando i tag come hanno nelle docs:

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

Entro il mio file handler sto importando le cose rilevanti:

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

e l'importazione funziona bene perché è non lanciare un errore. Sto facendo qualcosa di sbagliato, o c'è un problema con jinja2 stesso, come forse in ext.py?


UPDATE: Ho provato il suggerimento di sharth qui sotto e ha ottenuto lo stesso risultato. Ecco il mio gestore aggiornato che usa il suo suggerimento.

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) 

Anche in questo caso, funziona bene finché non utilizzo il tag autoescape.

+0

Ho appena notato che il tag di completamento automatico jinja2 non funziona come documentato anche nel framework di tipfy. Il che mi porta a pensare che sia un bug in jinja2, non un problema con il modo in cui lo sto usando. –

risposta

8

Il tag {% autoescape %} richiede Jinja 2.4 o successivo e l'estensione jinja2.ext.autoescape è stata caricata.

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

Grazie. Avevo pensato di poter importare l'estensione con l'istruzione import nella parte superiore dello script e non mi ero reso conto che avevo bisogno di impostare l'estensione come parametro quando ho istanziato l'ambiente. Suppongo che il paragrafo in cima alla documentazione per le estensioni (http://jinja.pocoo.org/extensions/) con il titolo "Aggiunta di estensioni" avrebbe dovuto essere un omaggio indelebile. :-) –

+0

in realtà qual è il significato di autoescape e perché utilizzare? – Virbhadrasinh

Problemi correlati