【问题标题】:Jinja extends does not render the original base templateJinja extends 不渲染原始的基本模板
【发布时间】:2021-03-08 23:55:21
【问题描述】:

这是我的 base.html 模板:

<head>
    <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@500&display=swap" rel="stylesheet">
    <link href="/static/styles.css" rel="stylesheet">
    <title>{% block title %}{% endblock %}</title>
    <ul>
      <li><a href="/templates/index.html">Home</a></li>
      <li><a href="/templates/cheerbot.html">Cheerbot</a></li>
      <li><a href="/templates/encouragement.html">Encouragement</a></li>
    </ul>
</head>

<body>

    <div class="jumbotron">
        <div class= "chin">
            <bodyblack>C H I N &nbsp; U P, &nbsp; C H E E R &nbsp; U P</bodyblack>
        </div>
        <h1>CHEERBOT</h1>
        <bodyblack>________________________________________________________</bodyblack>
    </div>
    {% block body %}
    {% endblock %}
</body>

这是名为cheerbot.html 的子模板:

{% extends "base.html" %}

{% block title %}Cheerbot{% endblock %}

{% block body %}
    <h1>testing</h1>
{% endblock %}

这是python代码:

from flask import Flask, flash, jsonify, redirect, render_template, request, session


app = Flask(__name__)

app.config["TEMPLATES_AUTO_RELOAD"] = True


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

但是,网页的标题没有显示“Cheerbot”,网页最终显示的是原始代码,而不是扩展基本模板。它有什么问题?提前致谢。

网页显示给我的图片

【问题讨论】:

标签: javascript html flask jinja2


【解决方案1】:

您必须以块的名称结束主体块,例如 {% endblock body %}

{% extends "base.html" %}

{% block title %}Cheerbot{% endblock title %}

{% block body %}
    <h1>testing</h1>
{% endblock body %}

和 base.html 中的相同

<head>
    <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@500&display=swap" rel="stylesheet">
    <link href="/static/styles.css" rel="stylesheet">
    <title>{% block title %}{% endblock title %}</title>
    <ul>
       <li><a href="/templates/index.html">Home</a></li>
       <li><a href="/templates/cheerbot.html">Cheerbot</a></li>
       <li><a href="/templates/encouragement.html">Encouragement</a></li>
    </ul>
</head>
<body>

    <div class="jumbotron">
        <div class= "chin">
             <bodyblack>C H I N &nbsp; U P, &nbsp; C H E E R &nbsp; U P</bodyblack>
        </div>
        <h1>CHEERBOT</h1>
          <bodyblack>________________________________________________________</bodyblack>
    </div>
    {% block body %}
    {% endblock body %}
运行这个 python 程序然后打开浏览器并输入 http://localhost:5000/
from flask import Flask, flash, jsonify, redirect, render_template, request, session


app = Flask(__name__)

app.config["TEMPLATES_AUTO_RELOAD"] = True


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

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

这不起作用的原因可能有很多(例如模板文件的不同目录),但我认为您的代码在此调整后应该可以工作

【讨论】:

  • 我试过了,还是不行。我的 HTML 文件也都在同一个文件夹中,称为模板。
  • 等等,你是通过烧瓶运行命令运行应用程序还是只是在浏览器中打开文件?
  • 看起来是这样的。运行 python 应用程序时不应该出现 jinja 语法,它应该像本地机器上的服务器一样工作 flask.palletsprojects.com/en/1.1.x/quickstart/…
  • 哦,我明白了!我没有通过烧瓶运行命令运行它。
【解决方案2】:

我有同样的问题。对我来说,它不起作用的原因是我的 base.html 从不同的目录引用了我的 style.js 和 style.css。为了修复它,我将链接标签更改为

<link rel="stylesheet" href="{{url_for('static', filename='app.js')}}">

之前被硬编码到我的 base.html 文件中

<link rel="stylesheet" href="static/app.js">

发生的情况是,当我重定向到一个新页面时,该页面存储在不同的位置,因此我的样式表没有被导入。

外卖:使用 url_for() 不必担心这些东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 2021-09-20
    相关资源
    最近更新 更多