Flask使用Jinja2模板继承遇TemplateSyntaxError问题求助
Flask模板继承Jinja2语法错误修复
在使用Flask的Jinja2模板继承机制时,出现以下语法错误:
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'.
以下是涉及的代码文件:
index.html
{% extends "layout.html" %} {% block body %} <!-- Page Header--> <header class="masthead" style="background-image: url('{{ url_for('static',filename='assets/img/home-bg.jpg') }}')"> <div class="container position-relative px-4 px-lg-5"> <div class="row gx-4 gx-lg-5 justify-content-center"> <div class="col-md-10 col-lg-8 col-xl-7"> <div class="site-heading"> <h1>Clean Blog</h1> <span class="subheading">A Blog Theme by Start Bootstrap</span> </div> </div> </div> </div> </header> <!-- Main Content--> <div class="container px-4 px-lg-5"> <div class="row gx-4 gx-lg-5 justify-content-center"> <div class="col-md-10 col-lg-8 col-xl-7"> <!-- Divider--> <hr class="my-4" /> <!-- Pager--> <div class="d-flex justify-content-end mb-4"><a class="btn btn-primary text-uppercase" href="#!">Older Posts →</a></div> </div> </div> </div> {% endblock body %}
layout.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /> <meta name="description" content="" /> <link href="{{ url_for('static',filename='css/styles.css') }}" rel="stylesheet" /> </head> <body> <!-- Navigation--> <nav class="navbar navbar-expand-lg navbar-light" id="mainNav"> <div class="container px-4 px-lg-5"> <a class="navbar-brand" href="index.html">Start Bootstrap</a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation"> Menu <i class="fas fa-bars"></i> </button> <div class="collapse navbar-collapse" id="navbarResponsive"> <ul class="navbar-nav ms-auto py-4 py-lg-0"> <li class="nav-item"><a class="nav-link px-lg-3 py-3 py-lg-4" href="/">Home</a></li> <li class="nav-item"><a class="nav-link px-lg-3 py-3 py-lg-4" href="/about">About</a></li> </ul> </div> </div> </nav> {% block body %} { % endblock % } <!-- Footer--> <footer class="border-top"> <div class="container px-4 px-lg-5"> <div class="row gx-4 gx-lg-5 justify-content-center"> <div class="col-md-10 col-lg-8 col-xl-7"> <ul class="list-inline text-center"> <li class="list-inline-item"> <a href="#!"> <span class="fa-stack fa-lg"> <i class="fas fa-circle fa-stack-2x"></i> <i class="fab fa-twitter fa-stack-1x fa-inverse"></i> </span> </a> </li> </ul> </div> </div> </footer> <!-- Bootstrap core JS--> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script> </body> </html>
错误原因与修复方法
问题出在layout.html中的block闭合标签:{ % endblock % }存在多余空格,Jinja2无法识别该语法,进而判定block body未被闭合。
将该行修正为以下任意一种写法即可:
{% block body %}{% endblock %}
或者匹配block名称的规范写法:
{% block body %}{% endblock body %}
修正后Jinja2就能正确解析模板继承,错误即可解决。
内容的提问来源于stack exchange,提问作者ARHAM RUMI
相关产品推荐
相关产品推荐

