【问题标题】:jinja2.exceptions.UndefinedError: there is no parent block called 'scripts'jinja2.exceptions.UndefinedError:没有称为“脚本”的父块
【发布时间】:2020-09-22 15:46:34
【问题描述】:

当我尝试运行我的应用程序时出现以下错误。

  File "/Users/ccc/microblog/app/templates/errors/500.html", line 1, in top-level template code
    {% extends "base.html" %}
  File "/Users/ccc/microblog/app/templates/base.html", line 48, in top-level template code
    {% block scripts %}
  File "/Users/ccc/microblog/app/templates/base.html", line 49, in block "scripts"
    {{ super() }}
jinja2.exceptions.UndefinedError: there is no parent block called 'scripts'.

我正在学习 Miguel 的 Flask 课程,看起来我们的代码大体相似。因此,我不太确定是否会出现此错误。 当我从块脚本中删除 {{super()}} 时,不会发生这种情况。代码运行顺利。

这是我的 base.html 代码:

<head>
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
</head>

<body>
  {% block navbar %}
   <nav class="navbar  navbar-expand-lg navbar-dark bg-dark">
       <div class="container">
           <div class="navbar-header">
               <a class="navbar-brand" href="{{ url_for('main.index') }}">Microblog</a>
           </div>
           <div class="collapse navbar-collapse" id="navbarSupportedContent">
               <ul class="navbar-nav mr-auto">
                   <li><a class="nav-link" href="{{ url_for('main.index') }}">Home</a></li>
                   <li><a class="nav-link" href="{{ url_for('main.explore') }}">Explore</a></li>
                   <li><a class="nav-link" href="{{ url_for('main.add_habit') }}">Habits</a></li>
               </ul>
               <ul class="nav navbar-nav navbar-right">
                   {% if current_user.is_anonymous %}
                   <li><a class="nav-link" href="{{ url_for('auth.login') }}">Login</a></li>
                   {% else %}
                   <li><a class="nav-link" href="{{ url_for('main.user', username=current_user.username) }}">Profile</a></li>
                   <li><a class="nav-link" href="{{ url_for('auth.logout') }}">Logout</a></li>
                   {% endif %}
               </ul>
           </div>
       </div>
       <hr>
   </nav>
  {% endblock %}

  {% block content %}
    <div class="container">
      {% with messages = get_flashed_messages() %}
      {% if messages %}
        {% for message in messages %}
        <div class="alert alert-secondary" role="alert">{{ message }}</div>
          {% endfor %}
          {% endif %}
          {% endwith %}

        {# application content needs to be provided in the app_content block #}
        <br>
        {% block app_content %}{% endblock %}
    </div>
  {% endblock %}

  {% block scripts %}
    {{ super() }}
    {{ moment.include_jquery() }}
    {{ moment.include_moment() }}
    <script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
  {% endblock %}
</body>

【问题讨论】:

标签: python flask jinja2


【解决方案1】:

错误信息说得对:你不能在base.html 模板中使用super(),因为它没有父模板。 super() 可以使用 only in a child template。当您将{{ super() }} 放入子模板中的块中时,它将包含父模板中的块内容。例如。如果您想在child.html 中添加额外的脚本,您可以编写:

{% extends "base.html" %}

{% block scripts %}
  {{ super() }}
  <script src="https://cnd.com/path.to.script.js></script>
{% endblock %}

现在它将包括来自父级的 所有 脚本以及这个脚本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多