《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
- 《Flask Web开发》学习笔记之bug--(9)【jinja2.exceptions.TemplateSyntaxError: unexpected '%'】
- 《Flask Web开发》学习笔记之bug--(5)【jinja2.exceptions.TemplateSyntaxError: Encountered unknown tag 'endlock'】
- 《Flask Web开发》学习笔记之bug--(6)【TypeError: __init__() got an unexpected keyword argument 'method'】
- Flask web 开发 Jinja2 模板
- 《Flask Web开发》学习笔记之bug--(1)【404 Not Found】
- 《Flask Web开发》学习笔记之bug--(7)【ImportError: cannot import name 'db'】
- 《Flask Web开发》学习笔记之bug--(8)【ImportError: No module named flask_mail】
- 《Flask Web开发》学习笔记之bug--(3)【ExtDeprecationWarning: Importing flask.ext.wtf is deprecated, use flask_】
- 《Flask Web开发》学习笔记之bug--(2)【AssertionError: View function mapping is overwriting an existing endpoi】
- 《Flask Web开发》学习笔记之bug--(4)【AttributeError: type object 'datetime.datetime' has no attribute 'utnow'】
- Flask学习总结笔记(4)-- Jinja2模板引擎之二
- TemplateSyntaxError: expected token ',', got 'string' Jinja2 flask大坑啊!!!
- Flask Web 开发 Jinja2 macro 信息
- Flask学习总结笔记(3)-- Jinja2模板引擎之一
- Flask——Jinja2 学习笔记
- Flask Web 开发学习笔记(一)
- Flask之旅《Flask Web开发:基于Python的Web应用开发实战》学习笔记
- FSADeprecationWarning(关键词:Web开发/Flask/bug)
- 5-27 冒泡法排序 (20分)
- mysql时间字符串和时间戳转换
- ListView源码分析
- 浅谈HTTP中Get与Post的区别
- 深度学习助力实现智能行为分析和事件识别
- 《Flask Web开发》学习笔记之bug--(9)【jinja2.exceptions.TemplateSyntaxError: unexpected '%'】
- 图片压缩
- 冒泡排序 java实现
- node.js
- 写个接口的实现类,在方法的前面加了@Override居然报错
- JavaWeb程序运行缓慢原因分析之一
- java中的sleep()和wait()的区别
- 三天入门Python---文件操作(第三天)
- 使用build.grade文件配置相关参数与多渠道打包