Jinja2模板错误:block 'title'被定义两次,如何解决?

jinja2.exceptions.TemplateAssertionError: block 'title' defined twice

{% block content %}
<div class="container">
    {% for message in get_flashed_messages() %}
    <div class="alert alert-warning">
        <button type="button" class="close" data-
dismiss="alert">&times;</button>
        {{ message }}
    </div>
    {% endfor %}
    {% block page_content %}{% endblock %}
</div>
{% endblock %}
##以上是base1.html的内容
======================================
{% extends "base1.html" %} 
{% import "bootstrap/wtf.html" as wtf %} 

{% block page_content %}
<div class="page-header">
    <h1>Hello, {% if name %}{{ name }}{% else %}Stranger{% endif %}!</h1>
</div>
{{ wtf.quick_form(form) }}
{% endblock %}
以上是index1.html的内容

=================主程序=======================
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
from flask import Flask, render_template, session, redirect,url_for
# from collections.abc import Sequence
# import _collections_abc
# from typing import Any, Mapping

app=Flask(__name__)
# bootstrap=Bootstrap(app)
app.config["SECRET_KEY"] = "123456"

class NameForm(FlaskForm):
    name = StringField('What is your name?', validators=[DataRequired()])
    submit = SubmitField('Submit')

@app.route("/",methods=["GET", "POST"])
def index():
    name=None
    form = NameForm()
    if form.validate_on_submit(): 
        name = form.name.data
        form.name.data = ''
    return render_template('index1.html', form=form, name=name)
    #     old_name=session.get("name")
    #     if old_name is not None and old_name !=form.name.date: 
    #         flash("看看你输入的什么")
    #     session["name"] = form_name_data
    #     return redirect(url_for("index"))
    # return render_template("index1.html",form = form, name = session.get("name"))

if __name__=="__main__":
    app.run(debug=True)

运行后报错,根据错误提示,我查找了代码中的block 'title',并没有被定义两次,然而还是报错,我就删除了代码中唯一的一处block 'title',还是报错。

阅读 644
avatarAI BotBETA

在你提供的代码片段中,并没有直接定义名为 titleblock。错误信息 jinja2.exceptions.TemplateAssertionError: block 'title' defined twice 指的是在继承链中的某个模板里 title 块被定义了两次,而不是在你的 index1.html 模板中直接定义了两次。

问题可能出在 base1.html 这个模板中,因为你在 index1.html 中使用了 {% extends "base1.html" %} 来继承它。base1.html 模板(虽然你没有在代码中提供)可能包含了两次 title 块的定义。

要解决这个问题,你需要做以下几步:

  1. 检查 base1.html 模板:确保在 base1.html 模板中 title 块只被定义了一次。
  2. 检查其他继承的模板:如果你的 base1.html 模板又继承了其他模板,确保那些模板也没有重复定义 title 块。
  3. 清理缓存:如果你之前运行过代码,并且模板有缓存,尝试清理缓存并重新运行,以确保你看到的是最新的模板内容。
  4. 确保没有动态包含:有时动态包含其他模板(如使用 {% include %})时,如果那些模板也定义了 title 块,也可能导致这个问题。

如果你确认 base1.html 和所有相关的模板中 title 块只被定义了一次,但问题依旧存在,请确保你的开发环境没有缓存旧版本的模板文件,并且你正在查看和编辑的是正确的模板文件。

如果问题依然没有解决,你可能需要提供更完整的 base1.html 模板代码,以便进行更深入的分析。在没有 base1.html 的完整内容的情况下,无法给出更具体的解决方案。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏