jinja2.exceptions.UndefinedError:'super'未定义

时间:2020-02-28 19:13:51

标签: python flask jinja2

我试图在自己的计算机上执行在书中找到的示例,但它给出了错误。

jinja2.exceptions.UndefinedError: 'super' is undefined

这特别是在我作为模板创建的user.html页面上发生的。如果我不尝试继承父页面,则一切正常。一旦使用

{% extends "bootstrap/base.html" %}

我得到了错误和500响应。

from flask import Flask, render_template
from flask_bootstrap import Bootstrap

app = Flask(__name__)
bootstrap = Bootstrap(app)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/user/<name>') 
def user(name):
    return render_template('user.html', name=name)

index.html和user.html(加载引导程序有问题的那个)

#user.html
{% extends 'bootstrap/base.html' %}
{% block head %}
<h1>Hi {{ name }}</h1>
{% endblock %}

#index.html
<h1>Hello World</h1>
127.0.0.1 - - [28/Feb/2020 23:57:29] "GET / HTTP/1.1" 200 -
[2020-02-28 23:57:33,646] ERROR in app: Exception on /user/salman [GET]
Traceback (most recent call last):
  File "/home/salman/Documents/projects/flasky/venv/lib/python3.6/site-packages/flask/app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/salman/Documents/projects/flasky/venv/lib/python3.6/site-packages/flask/app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/salman/Documents/projects/flasky/venv/lib/python3.6/site-packages/flask/app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/salman/Documents/projects/flasky/venv/lib/python3.6/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/home/salman/Documents/projects/flasky/venv/lib/python3.6/site-packages/flask/app.py", line 1949, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/salman/Documents/projects/flasky/venv/lib/python3.6/site-packages/flask/app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/salman/Documents/projects/flasky/hello.py", line 14, in user
    return render_template('user.html', name=name)
  File "/home/salman/Documents/projects/flasky/venv/lib/python3.6/site-packages/flask/templating.py", line 140, in render_template
    ctx.app,
  File "/home/salman/Documents/projects/flasky/venv/lib/python3.6/site-packages/flask/templating.py", line 120, in _render
    rv = template.render(context)
  File "/home/salman/Documents/projects/flasky/venv/lib/python3.6/site-packages/jinja2/environment.py", line 1090, in render
    self.environment.handle_exception()
  File "/home/salman/Documents/projects/flasky/venv/lib/python3.6/site-packages/jinja2/environment.py", line 832, in handle_exception
    reraise(*rewrite_traceback_stack(source=source))
  File "/home/salman/Documents/projects/flasky/venv/lib/python3.6/site-packages/jinja2/_compat.py", line 28, in reraise
    raise value.with_traceback(tb)
  File "/home/salman/Documents/projects/flasky/templates/user.html", line 1, in top-level template code
    {% extends 'bootstrap/base.html' %}
  File "/home/salman/Documents/projects/flasky/venv/lib/python3.6/site-packages/flask_bootstrap/templates/bootstrap/base.html", line 24, in top-level template code
    {%- endblock content %}
jinja2.exceptions.UndefinedError: 'super' is undefined

1 个答案:

答案 0 :(得分:0)

您需要实现super()函数以呈现父块的内容并在父块上返回结果(例如):

{% block head %}
{{ super() }}
<title> Hi {{ name }}</title>
{% endblock %}

实际上,我无法产生错误,可能是因为您使用了多个模板继承。