2016-05-14 12 views
0

Ich erhalte die folgende Fehlermeldung beim Versuch {% set foo = 42 %} in meiner HTML-Vorlage. Die Vorlage funktioniert einwandfrei, wenn set nicht verwendet wird.Jinja2 installieren Problem

TemplateSyntaxError: Invalid block tag: 'set', expected 'endblock' or 'endblock content' 

Unten habe ich das vollständige Sitzungsprotokoll wie in den Kommentaren vorgeschlagen hinzugefügt.

*** Running dev_appserver with the following flags: 
    --skip_sdk_update_check=yes --port=15093 --admin_port=8018 
Python command: /usr/bin/python2.7 
INFO  2016-05-14 18:36:26,513 devappserver2.py:762] Skipping SDK update check. 
INFO  2016-05-14 18:36:26,696 api_server.py:204] Starting API server at: http://localhost:56265 
INFO  2016-05-14 18:36:26,701 dispatcher.py:197] Starting module "default" running at: http://localhost:15093 
INFO  2016-05-14 18:36:26,704 admin_server.py:118] Starting admin server at: http://localhost:8018 
ERROR 2016-05-14 18:37:48,778 webapp2.py:1528] Invalid block tag: 'set', expected 'endblock' or 'endblock content' 
Traceback (most recent call last): 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 1511, in __call__ 
    rv = self.handle_exception(request, response, e) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 1505, in __call__ 
    rv = self.router.dispatch(request, response) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher 
    return route.handler_adapter(request, response) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 1077, in __call__ 
    return handler.dispatch() 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 547, in dispatch 
    return self.handle_exception(e, self.app.debug) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 545, in dispatch 
    return method(*args, **kwargs) 
    File "/Users/brian/googleapps/lastturn/views.py", line 187, in get 
    self.response.out.write(template.render(path, template_values)) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/webapp/template.py", line 91, in render 
    t = _load_internal_django(template_path, debug) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/webapp/template.py", line 165, in _load_internal_django 
    template = django.template.loader.get_template(file_name) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/_internal/django/template/loader.py", line 160, in get_template 
    template = get_template_from_string(template, origin, template_name) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/_internal/django/template/loader.py", line 168, in get_template_from_string 
    return Template(source, origin, name) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/_internal/django/template/__init__.py", line 158, in __init__ 
    self.nodelist = compile_string(template_string, origin) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/_internal/django/template/__init__.py", line 186, in compile_string 
    return parser.parse() 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/_internal/django/template/__init__.py", line 281, in parse 
    compiled_result = compile_func(self, token) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/_internal/django/template/loader_tags.py", line 195, in do_extends 
    nodelist = parser.parse() 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/_internal/django/template/__init__.py", line 281, in parse 
    compiled_result = compile_func(self, token) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/_internal/django/template/loader_tags.py", line 173, in do_block 
    nodelist = parser.parse(('endblock', 'endblock %s' % block_name)) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/_internal/django/template/__init__.py", line 279, in parse 
    self.invalid_block_tag(token, command, parse_until) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/_internal/django/template/__init__.py", line 332, in invalid_block_tag 
    raise self.error(token, "Invalid block tag: '%s', expected %s" % (command, get_text_list(["'%s'" % p for p in parse_until]))) 
TemplateSyntaxError: Invalid block tag: 'set', expected 'endblock' or 'endblock content' 
ERROR 2016-05-14 18:37:48,784 wsgi.py:279] 
Traceback (most recent call last): 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 267, in Handle 
    result = handler(dict(self._environ), self._StartResponse) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 1519, in __call__ 
    response = self._internal_error(e) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 1511, in __call__ 
    rv = self.handle_exception(request, response, e) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 1505, in __call__ 
    rv = self.router.dispatch(request, response) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher 
    return route.handler_adapter(request, response) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 1077, in __call__ 
    return handler.dispatch() 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 547, in dispatch 
    return self.handle_exception(e, self.app.debug) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 545, in dispatch 
    return method(*args, **kwargs) 
    File "/Users/brian/googleapps/lastturn/views.py", line 187, in get 
    self.response.out.write(template.render(path, template_values)) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/webapp/template.py", line 91, in render 
    t = _load_internal_django(template_path, debug) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/webapp/template.py", line 165, in _load_internal_django 
    template = django.template.loader.get_template(file_name) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/_internal/django/template/loader.py", line 160, in get_template 
    template = get_template_from_string(template, origin, template_name) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/_internal/django/template/loader.py", line 168, in get_template_from_string 
    return Template(source, origin, name) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/_internal/django/template/__init__.py", line 158, in __init__ 
    self.nodelist = compile_string(template_string, origin) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/_internal/django/template/__init__.py", line 186, in compile_string 
    return parser.parse() 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/_internal/django/template/__init__.py", line 281, in parse 
    compiled_result = compile_func(self, token) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/_internal/django/template/loader_tags.py", line 195, in do_extends 
    nodelist = parser.parse() 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/_internal/django/template/__init__.py", line 281, in parse 
    compiled_result = compile_func(self, token) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/_internal/django/template/loader_tags.py", line 173, in do_block 
    nodelist = parser.parse(('endblock', 'endblock %s' % block_name)) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/_internal/django/template/__init__.py", line 279, in parse 
    self.invalid_block_tag(token, command, parse_until) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/_internal/django/template/__init__.py", line 332, in invalid_block_tag 
    raise self.error(token, "Invalid block tag: '%s', expected %s" % (command, get_text_list(["'%s'" % p for p in parse_until]))) 
TemplateSyntaxError: Invalid block tag: 'set', expected 'endblock' or 'endblock content' 
INFO  2016-05-14 18:37:48,792 module.py:812] default: "GET/HTTP/1.1" 500 - 

Unten habe ich die Revisionen hinzugefügt ich meine views.py gemacht. Die auskommentierten Zeilen geben die ursprünglichen jinja2-Umgebungsbedingungen an. Diese Überarbeitungen sind auf Vorschläge in Kommentaren zurückzuführen. Aber ich bekomme immer noch die gleiche Fehlermeldung, die darauf hindeutet, dass jinja2 nicht benutzt wird.

TEMPLATE_DIR = os.path.join(os.path.dirname(__file__), 'templates') 
#jinja_environment = \ 
#jinja2.Environment(loader=jinja2.FileSystemLoader(TEMPLATE_DIR)) 

JINJA_ENVIRONMENT = jinja2.Environment(
    loader=jinja2.FileSystemLoader(os.path.dirname(__file__)), 
    extensions=['jinja2.ext.autoescape'], 
    autoescape=True) 

class BaseHandler(webapp2.RequestHandler): 

    @webapp2.cached_property 
    def jinja2(self): 
     return jinja2.get_jinja2(app=self.app) 

    def render_template(
     self, 
     filename, 
     template_values, 
     **template_args 
     ): 
#template = jinja_environment.get_template(filename) 
    template = JINJA_ENVIRONMENT.get_template(filename) 
     self.response.out.write(template.render(template_values)) 

Unten ist die Vorlage base.html.

<html> 
    <head> 
    <link rel="stylesheet" href="/static/css/reset.css"> 
    <link rel="stylesheet" href="/static/css/style.css"> 
    </head> 
    <body> 
    <div class="wrapper"> 
    {% block content %} 
    {% endblock content %} 
    </div> 
    </body> 
</html> 

Unten ist das "Herz" der tatsächlichen Vorlage. Mit "Herz", ich meine, ich habe die Eingeweide weggelassen, weil dies nur ein Test ist.

{% extends "base.html" %} 
    {% block content %} 
    <center> 
     <h1>Create or edit your own Blog</h1> 
     </center> 
     {% set foo = 42 %} 
     {{ foo }} 

    {% endblock content %} 

This answer suggests to me that jinja2 is not installed (properly?).

Gibt es einen anderen Teil der Installation, die ich ändern müssen?

This answer shows more input about ipython installation, aber ich verwende google-app-engine, die unterschiedlich sein können. Die folgende Liste bestätigt, dass Jinja2 2.8 installiert ist.

server:~ brian$ pip freeze 
Warning: cannot find svn location for setuptools===0.6c12dev-r85381 
all==0.0.6 
altgraph==0.7.1 
atari-py==0.0.17 
bdist-mpkg==0.4.4 
bonjour-py==0.3 
caller-module==0.0.9 
Django==1.3.1 
include-server===3.1-toolwhip.1 
Jinja2==2.8 
macholib==1.3 
MarkupSafe==0.23 
mod-python==3.3.1 
modulegraph==0.8.1 
numpy==1.11.0 
PIL==1.1.7 
Pillow==3.2.0 
public==0.0.0 
py2app==0.5.3 
pyglet==1.2.4 
pyobjc-core==2.3.2a0 
pyobjc-framework-AddressBook==2.3.2a0 

pyOpenSSL==0.12 
PyRSS2Gen==1.0.0 
python-dateutil==1.5 
PyYAML==3.11 
render==1.0.0 
requests==2.9.1 
six==1.10.0 
Twisted==11.0.0 
xattr==0.6.1 
zope.interface==3.5.1 
You are using pip version 8.1.1, however version 8.1.2 is available. 
server:~ brian$ 
+0

Dürfen wir Ihre Vorlage oder zumindest den vollständigen Block Ihrer verdächtigen Aussage sehen? –

+0

Ja, bitte schauen Sie sich die überarbeitete Frage an. – zerowords

+1

Syntax ist korrekt für Jinja2.Aber Ihre App scheint Django-Vorlagen zu verwenden, keine Jinja2-Einsen - Syntax ist etwas anders. Siehe @ Blenders Kommentare zu http://stackoverflow.com/questions/20306640/is-jinja2-documentation-out-of-date. –

Antwort

0

Nach viel Hilfe über Kommentare zu meiner ursprünglichen Frage und zu viel Stolpern, habe ich endlich meine Frage beantwortet. Ich war verwirrt von Webapp2 und Jinja mit einem template.render(), aber sie sind anders.

template.render() von webapp scheint 2 Parameter zu erfordern - der Pfad und der Vorlagenname - und mein aktueller Code verwendet dieses Format. Ich möchte jedoch Jinja2 verwenden, wo template.render() nur 1 Parameter benötigt - den Vorlagennamen.

Entsprechend der google docs for using Jinja in the guestbook app wurde das folgende Format angezeigt.

JINJA_ENVIRONMENT = jinja2.Environment(
    loader=jinja2.FileSystemLoader(os.path.dirname(__file__)), 
    extensions=['jinja2.ext.autoescape'], 
    autoescape=True) 

Aber es stellt sich heraus, dass nicht gut mit meinem gewählten BaseHandler Klasse funktioniert, die Vorlagen in ihrem eigenen Unterverzeichnis ausdrückt, „Vorlagen“. Stattdessen habe ich den folgenden Code verwendet, bei dem TEMPLATE_DIR Datei im "loader =" - Satz ersetzt.

TEMPLATE_DIR = os.path.join(os.path.dirname(__file__), 'templates') 
JINJA_ENVIRONMENT = jinja2.Environment(
    loader=jinja2.FileSystemLoader(TEMPLATE_DIR), 
    extensions=['jinja2.ext.autoescape'], 
    autoescape=True) 

Btw, ich importieren nicht mehr die Webapp template. Und ich benutze den folgenden Stil in meinen "get def" s.

template = JINJA_ENVIRONMENT.get_template('index.html') 
self.response.out.write(template.render(template_values)) 

Also, auch wenn die Frage stellt „Jinja installiert Problem“, ist es nicht genau das war die Installation, das war problematisch, vielmehr hatte ich Schwierigkeiten Jinja mit meiner vorhandenen Verzeichnisstruktur zu integrieren.