《Flask Web开发》学习笔记之bug--(9)【jinja2.exceptions.TemplateSyntaxError: unexpected '%'】

来源:互联网 发布:特定域名使用指定dns 编辑:程序博客网 时间:2024/06/04 20:07

/app/main/views.py

from flask import render_template, session, redirect, url_for, current_appfrom .. import dbfrom ..models import Userfrom ..email import send_emailfrom . import mainfrom .forms import NameForm@main.route('/', methods=['GET', 'POST'])def index():form = NameForm()if form.validate_on_submit():user = User.query.filter_by(username=form.name.data).first()if user is None:user = User(username=form.name.data)db.session.add(user)session['known'] = Falseif current_app.config['FLASKY_ADMIN']:send_mail(current_app.config['FLASKY_ADMIN'], \'New User', 'mail//new_user', user=user)else:session['known'] = Truesession['name'] = form.name.datareturn redirect(url_for('.index'))return render_template('index.html', form=form, name=session.get('name'), known=session.get('known', False))

/app/templates/base.html

{% extends "bootstrap/base.html" %}{% block title %}Flasky{% endblock %}{% block head %}{{ super() }}<link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}" type="image/x-icon"><link rel="icon" href="{{ url_for('static', filename='favicon.ico') }}" type="image/x-icon">{% endblock %}{% block navbar %}<div class="navbar navbar-inverse" role="navigation"><div class="container"><div class="navbar-header"><button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-toggle"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a class="navbar-brand" href="{{ url_for('main.index') }}">Flask</a></div><div class="navbar-collapse collapse"><ul class="nav navbar-nav navbar-right">{% if current_user.is_authenticated() %}<li><a href="{{ url_for('auth.logout') }}">Sign Out</a></li>{% else %}<li><a href="{{ url_for('auth.login') }}">Sign In</a></li>{% endif %}</ul></div></div></div>{% endblock %}{% block content %}<div class="container">{% for message in get_flashed_messages() %}<div class="alert alert-warning"><button type="button" class="close" data-dismiss="alert">×</button>{{ message }}</div>{{% endfor %}}{% block page_content %}{% endblock %}</div>{% endblock %}{% block scripts %}{{ super() }}{{ moment.include_moment() }}{% endblock %}

报错信息:

$ python3 manage.py runserver --host 0.0.0.0/home/henry/.local/lib/python3.5/site-packages/flask_sqlalchemy/__init__.py:800: UserWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True to suppress this warning.  warnings.warn('SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True to suppress this warning.') * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) * Restarting with stat/home/henry/.local/lib/python3.5/site-packages/flask_sqlalchemy/__init__.py:800: UserWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True to suppress this warning.  warnings.warn('SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True to suppress this warning.') * Debugger is active! * Debugger PIN: 187-944-274127.0.0.1 - - [17/Jul/2017 17:26:10] "GET / HTTP/1.1" 500 -Traceback (most recent call last):  File "/home/henry/.local/lib/python3.5/site-packages/flask/app.py", line 1997, in __call__    return self.wsgi_app(environ, start_response)  File "/home/henry/.local/lib/python3.5/site-packages/flask/app.py", line 1985, in wsgi_app    response = self.handle_exception(e)  File "/home/henry/.local/lib/python3.5/site-packages/flask/app.py", line 1540, in handle_exception    reraise(exc_type, exc_value, tb)  File "/home/henry/.local/lib/python3.5/site-packages/flask/_compat.py", line 33, in reraise    raise value  File "/home/henry/.local/lib/python3.5/site-packages/flask/app.py", line 1982, in wsgi_app    response = self.full_dispatch_request()  File "/home/henry/.local/lib/python3.5/site-packages/flask/app.py", line 1614, in full_dispatch_request    rv = self.handle_user_exception(e)  File "/home/henry/.local/lib/python3.5/site-packages/flask/app.py", line 1517, in handle_user_exception    reraise(exc_type, exc_value, tb)  File "/home/henry/.local/lib/python3.5/site-packages/flask/_compat.py", line 33, in reraise    raise value  File "/home/henry/.local/lib/python3.5/site-packages/flask/app.py", line 1612, in full_dispatch_request    rv = self.dispatch_request()  File "/home/henry/.local/lib/python3.5/site-packages/flask/app.py", line 1598, in dispatch_request    return self.view_functions[rule.endpoint](**req.view_args)  File "/home/henry/dev/Flask_Web_Python_Henry/flask_henry/app/main/views.py", line 25, in index    return render_template('index.html', form=form, name=session.get('name'), known=session.get('known', False))  File "/home/henry/.local/lib/python3.5/site-packages/flask/templating.py", line 134, in render_template    context, ctx.app)  File "/home/henry/.local/lib/python3.5/site-packages/flask/templating.py", line 116, in _render    rv = template.render(context)  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/environment.py", line 1008, in render    return self.environment.handle_exception(exc_info, True)  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/environment.py", line 780, in handle_exception    reraise(exc_type, exc_value, tb)  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/_compat.py", line 37, in reraise    raise value.with_traceback(tb)  File "/home/henry/dev/Flask_Web_Python_Henry/flask_henry/app/templates/base.html", line 43, in template    {{% endfor %}}  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/environment.py", line 1005, in render    return concat(self.root_render_func(self.new_context(vars)))  File "/home/henry/dev/Flask_Web_Python_Henry/flask_henry/app/templates/index.html", line 1, in top-level template code    {% extends "base.html" %}  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/environment.py", line 780, in handle_exception    reraise(exc_type, exc_value, tb)  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/_compat.py", line 37, in reraise    raise value.with_traceback(tb)  File "/home/henry/dev/Flask_Web_Python_Henry/flask_henry/app/templates/base.html", line 43, in template    {{% endfor %}}  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/environment.py", line 497, in _parse    return Parser(self, source, name, encode_filename(filename)).parse()  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 896, in parse    result = nodes.Template(self.subparse(), lineno=1)  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 878, in subparse    rv = self.parse_statement()  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 130, in parse_statement    return getattr(self, 'parse_' + self.stream.current.value)()  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 268, in parse_block    node.body = self.parse_statements(('name:endblock',), drop_needle=True)  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 165, in parse_statements    result = self.subparse(end_tokens)  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 878, in subparse    rv = self.parse_statement()  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 130, in parse_statement    return getattr(self, 'parse_' + self.stream.current.value)()  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 198, in parse_for    body = self.parse_statements(('name:endfor', 'name:else'))  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 165, in parse_statements    result = self.subparse(end_tokens)  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 870, in subparse    add_data(self.parse_tuple(with_condexpr=True))  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 615, in parse_tuple    args.append(parse())  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 427, in parse_expression    return self.parse_condexpr()  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 432, in parse_condexpr    expr1 = self.parse_or()  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 445, in parse_or    left = self.parse_and()  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 454, in parse_and    left = self.parse_not()  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 465, in parse_not    return self.parse_compare()  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 469, in parse_compare    expr = self.parse_math1()  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 491, in parse_math1    left = self.parse_concat()  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 502, in parse_concat    args = [self.parse_math2()]  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 512, in parse_math2    left = self.parse_pow()  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 523, in parse_pow    left = self.parse_unary()  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 541, in parse_unary    node = self.parse_primary()  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 578, in parse_primary    self.fail("unexpected '%s'" % describe_token(token), token.lineno)  File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 59, in fail    raise exc(msg, lineno, self.name, self.filename)jinja2.exceptions.TemplateSyntaxError: unexpected '%'127.0.0.1 - - [17/Jul/2017 17:26:10] "GET /?__debugger__=yes&cmd=resource&f=style.css HTTP/1.1" 200 -127.0.0.1 - - [17/Jul/2017 17:26:10] "GET /?__debugger__=yes&cmd=resource&f=jquery.js HTTP/1.1" 200 -127.0.0.1 - - [17/Jul/2017 17:26:10] "GET /?__debugger__=yes&cmd=resource&f=debugger.js HTTP/1.1" 200 -127.0.0.1 - - [17/Jul/2017 17:26:11] "GET /?__debugger__=yes&cmd=resource&f=console.png HTTP/1.1" 200 -

浏览器里面的报错信息:

http://localhost:5000/

jinja2.exceptions.TemplateSyntaxErrorjinja2.exceptions.TemplateSyntaxError: unexpected '%'Traceback (most recent call last)File "/home/henry/.local/lib/python3.5/site-packages/flask/app.py", line 1997, in __call__return self.wsgi_app(environ, start_response)File "/home/henry/.local/lib/python3.5/site-packages/flask/app.py", line 1985, in wsgi_appresponse = self.handle_exception(e)File "/home/henry/.local/lib/python3.5/site-packages/flask/app.py", line 1540, in handle_exceptionreraise(exc_type, exc_value, tb)File "/home/henry/.local/lib/python3.5/site-packages/flask/_compat.py", line 33, in reraiseraise valueFile "/home/henry/.local/lib/python3.5/site-packages/flask/app.py", line 1982, in wsgi_appresponse = self.full_dispatch_request()File "/home/henry/.local/lib/python3.5/site-packages/flask/app.py", line 1614, in full_dispatch_requestrv = self.handle_user_exception(e)File "/home/henry/.local/lib/python3.5/site-packages/flask/app.py", line 1517, in handle_user_exceptionreraise(exc_type, exc_value, tb)File "/home/henry/.local/lib/python3.5/site-packages/flask/_compat.py", line 33, in reraiseraise valueFile "/home/henry/.local/lib/python3.5/site-packages/flask/app.py", line 1612, in full_dispatch_requestrv = self.dispatch_request()File "/home/henry/.local/lib/python3.5/site-packages/flask/app.py", line 1598, in dispatch_requestreturn self.view_functions[rule.endpoint](**req.view_args)File "/home/henry/dev/Flask_Web_Python_Henry/flask_henry/app/main/views.py", line 25, in indexreturn render_template('index.html', form=form, name=session.get('name'), known=session.get('known', False))File "/home/henry/.local/lib/python3.5/site-packages/flask/templating.py", line 134, in render_templatecontext, ctx.app)File "/home/henry/.local/lib/python3.5/site-packages/flask/templating.py", line 116, in _renderrv = template.render(context)File "/home/henry/.local/lib/python3.5/site-packages/jinja2/environment.py", line 1008, in renderreturn self.environment.handle_exception(exc_info, True)File "/home/henry/.local/lib/python3.5/site-packages/jinja2/environment.py", line 780, in handle_exceptionreraise(exc_type, exc_value, tb)File "/home/henry/.local/lib/python3.5/site-packages/jinja2/_compat.py", line 37, in reraiseraise value.with_traceback(tb)File "/home/henry/dev/Flask_Web_Python_Henry/flask_henry/app/templates/base.html", line 43, in template{{% endfor %}}File "/home/henry/.local/lib/python3.5/site-packages/jinja2/environment.py", line 1005, in renderreturn concat(self.root_render_func(self.new_context(vars)))File "/home/henry/dev/Flask_Web_Python_Henry/flask_henry/app/templates/index.html", line 1, in top-level template code{% extends "base.html" %}File "/home/henry/.local/lib/python3.5/site-packages/jinja2/environment.py", line 780, in handle_exceptionreraise(exc_type, exc_value, tb)File "/home/henry/.local/lib/python3.5/site-packages/jinja2/_compat.py", line 37, in reraiseraise value.with_traceback(tb)File "/home/henry/dev/Flask_Web_Python_Henry/flask_henry/app/templates/base.html", line 43, in template{{% endfor %}}File "/home/henry/.local/lib/python3.5/site-packages/jinja2/environment.py", line 497, in _parsereturn Parser(self, source, name, encode_filename(filename)).parse()File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 896, in parseresult = nodes.Template(self.subparse(), lineno=1)File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 878, in subparserv = self.parse_statement()File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 130, in parse_statementreturn getattr(self, 'parse_' + self.stream.current.value)()File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 268, in parse_blocknode.body = self.parse_statements(('name:endblock',), drop_needle=True)File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 165, in parse_statementsresult = self.subparse(end_tokens)File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 878, in subparserv = self.parse_statement()File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 130, in parse_statementreturn getattr(self, 'parse_' + self.stream.current.value)()File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 198, in parse_forbody = self.parse_statements(('name:endfor', 'name:else'))File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 165, in parse_statementsresult = self.subparse(end_tokens)File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 870, in subparseadd_data(self.parse_tuple(with_condexpr=True))File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 615, in parse_tupleargs.append(parse())File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 427, in parse_expressionreturn self.parse_condexpr()File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 432, in parse_condexprexpr1 = self.parse_or()File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 445, in parse_orleft = self.parse_and()File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 454, in parse_andleft = self.parse_not()File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 465, in parse_notreturn self.parse_compare()File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 469, in parse_compareexpr = self.parse_math1()File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 491, in parse_math1left = self.parse_concat()File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 502, in parse_concatargs = [self.parse_math2()]File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 512, in parse_math2left = self.parse_pow()File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 523, in parse_powleft = self.parse_unary()File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 541, in parse_unarynode = self.parse_primary()File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 578, in parse_primaryself.fail("unexpected '%s'" % describe_token(token), token.lineno)File "/home/henry/.local/lib/python3.5/site-packages/jinja2/parser.py", line 59, in failraise exc(msg, lineno, self.name, self.filename)jinja2.exceptions.TemplateSyntaxError: unexpected '%'The debugger caught an exception in your WSGI application. You can now look at the traceback which led to the error.To switch between the interactive traceback and the plaintext one, you can click on the "Traceback" headline. From the text traceback you can also create a paste of it. For code execution mouse-over the frame you want to debug and click on the console icon on the right side.You can execute arbitrary Python code in the stack frames and there are some extra helpers available for introspection:dump() shows all variables in the framedump(obj) dumps all that's known about the objectBrought to you by DON'T PANIC, your friendly Werkzeug powered traceback interpreter.


找到问题的原因了,这一行前后多了【{ }】















阅读全文
0 0