源码

<!DOCTYPE html>
<title>{% block title %}{% endblock title %} - Flask</title>
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
<!--
1、g在模板中自动可用。基于if g.useris set(from load_logged_in_user),显示用户名和 注销链接,或显示注册和登录的链接。
url_for()也可自动使用,并用于生成视图的 URL,而不是手动写出来。
2、在页面标题之后,在内容之前,模板循环返回的每条消息get_flashed_messages()。
flash()在视图中用于显示错误消息,这是将显示它们的代码。
3、此处定义的三个块将在其他模板中被覆盖:
3.1. {% block title %} 将更改浏览器选项卡和窗口标题中显示的标题。
3.2. {% block header %} 类似title但会更改页面上显示的标题。
3.3. {% block content %} 是每个页面的内容,例如登录表单或博客文章。
基本模板直接位于templates目录中。为了保持其他组织的有序性,蓝图的模板将放置在 与蓝图同名的目录中
-->
<nav>
<h1>Flaskr</h1>
<ul>
{% if g.user %}
<li><span>{{ g.user.get("username") }}</span></li>
<li><a href="{{ url_for('auth.logout') }}">Log Out</a></li>
{% else %}
<li><a href="{{ url_for('auth.register') }}">Register</a></li>
<li><a href="{{ url_for('auth.login') }}">Log In</a></li>
{% endif %}
</ul>
</nav>
<section class="content">
<header>
{% block header %}{% endblock header %}
</header>
{% for message in get_flashed_messages() %}
<div class="flash">{{ message }}</div>
{% endfor %}
{% block content %}{% endblock content %}
</section>

Bug

jinja2.exceptions.TemplateSyntaxError

jinja2.exceptions.TemplateSyntaxError: Unexpected end of template. Jinja was looking for the following tags: 'endblock'. The innermost block that needs to be closed is 'block'.





错误日志一直显示在 base.html 的34 行有问题,提示 The innermost block that needs to be closed is 'block'.

排查

初步排查是block 语法写错了,或者某个地方多了空格等 低级错误。

排查一遍代码,发现没有书写的错误,

再排查了是否新版本的 JinJa2有语法变更。导致的异常。

查了 2.10.X 版本的官网,发现基本语法也没问题。

问题所在

突发奇想,注释里有 {% block title %} 等。是不是他们引起的?

将这三个 block 删除后,程序果然正常了。

反思

在html里下 JinJa2 语法时, {% block %} 语句即使被注释掉了, 也依然生效。

这个坑要牢记。不然很难排查。

报错的地方, 和正在原因所在的地方,没啥关系。让人头疼。

最新文章

  1. dos命名重启或关闭远程服务器
  2. CSS3弹性盒模型flexbox完整版教程
  3. Inlinehook PspCreateProcess
  4. JdkDynamicAopProxy源码
  5. 每日一“酷”之array
  6. JavaScript高级程序设计17.pdf
  7. &quot;类名.this&quot;与&quot;this&quot;的区别
  8. Python练习六
  9. net use远程重启服务器
  10. mybatis事务管理机制详解
  11. Spring Boot配置加载顺序
  12. [转][c++][跨平台]c++跨平台开发小结
  13. SharpGL学习笔记(六) 裁剪变换
  14. css零零散散的笔记
  15. Java中取两位小数
  16. Oracle EBS OM发运行状态自动更改
  17. R语言实战(九)主成分和因子分析
  18. jquery选择器用法笔记(第一部分)
  19. Js 实战3(实现全选)
  20. redux实现原理

热门文章

  1. codeforces 1249 D2 Too Many Segments (hard version) 贪心+树状数组
  2. bash 基础之五 条件测试、read
  3. input输入框限制只能输入数字
  4. 微信小程序之简单记账本开发记录(二)
  5. java单例问题
  6. Cesium学习系列汇总
  7. Flume-自定义 Interceptor(拦截器)
  8. docker swarm和 k8s对比
  9. Android 自定义AlertDialog退出对话框
  10. python实现并发服务器实现方式(多线程/多进程/select/epoll)