0

我正在学习模板继承,我有点困惑。当我导航到 时index.html,我希望标题出现在浏览器的选项卡上。我希望将此功能内置到base.html我从中继承的文件中,这样只需将参数标题(和 html 文件名)传递给函数indexapp.py即可如上所述执行。

由于某种原因,代码没有按预期运行;标题不在浏览器选项卡上。

应用程序.py:

from flask import Flask, render_template
app = Flask(__name__)

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

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

索引.html:

<!DOCTYPE html>
{%extends "base.html"%}
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
  </head>
  <body>

  </body>
</html>

base.html:

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
    {%block head%}
      {% if title %}
      <title> {{title}} </title>
      {%endif%}
    {%endblock%}
  </head>
  <body>
    {%block body%}{%endblock%}
  </body>
</html>

index.html 和 base.html 都可以在模板文件夹中找到,这是 jinja 运行所必需的。没有触发错误,标题根本没有按预期格式化。

我究竟做错了什么?

4

2 回答 2

0

base.html有两个<title>标签。这不是有效的 html。您需要删除空的并允许在所有情况下将标题作为参数传递。

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title> <!-- Remove this line here! -->
    {%block head%}
      {% if title %}
      <title> {{title}} </title>
      {%endif%}
    {%endblock%}
  </head>
  <body>
    {%block body%}{%endblock%}
  </body>
</html>
于 2020-05-28T16:06:43.807 回答
0

我想通了,我需要从块语句中拉出标题行!微妙但有很大的不同。

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
    {%block head%}
    {%endblock%}
      {% if title %}
      <title> {{title}} </title>
      {%endif%}
  </head>
  <body>
    {%block body%}{%endblock%}
  </body>
</html>
于 2020-05-28T16:05:52.613 回答