【问题标题】:jinja2.exceptions.UndefinedError: 'super' is undefinedjinja2.exceptions.UndefinedError: 'super' 未定义
【发布时间】:2020-02-28 19:13:51
【问题描述】:

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

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

【问题讨论】:

    标签: python flask jinja2


    【解决方案1】:

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

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

    实际上我不能产生你得到的错误,可能是你使用了多模板继承。

    【讨论】:

      猜你喜欢
      • 2020-12-24
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-11
      • 2021-11-20
      • 2020-03-08
      相关资源
      最近更新 更多