python flask 扩展基础模板不起作用

python flask extends base template does not work

提问人:bloomsdayforever 提问时间:10/23/2023 更新时间:10/24/2023 访问量:22

问:

我正在尝试为我的 flask 应用程序使用模板,但由于某些原因,即使我指导了路径并在两个模板文件中都包含了 {% 块内容 %}{% endblock content %},模板也不起作用。我很困惑为什么这行不通。这里出了什么问题?

/template/base.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Class Project</title>
    <link rel="stylesheet" href="../style.css" type="text/css" media="screen" title="no title" charset="utf-8">
  </head>
  <body class="background-color">
    <div class="container">
      <nav>
        <a href="/">Display All Songs</a>
        <a href="/add-songs">Add Songs</a>
        <a href="/delete-songs">Delete Songs</a>
        <a href="/search-songs">Search Songs</a>
      </nav>
      <main>{% block content %}{% endblock content %}</main>
    </div>
  </body>
</html>

/template/home.html

{% extends 'base.html' %}
{% block content %}{% endblock content %}
    {% for song in song_list%}
    <div>
      <p>Music Name: {{song["song_name"]}}</h1>
      <p>user: {{song["user_name"]}}</p>
    </div>
    <br>
    {% endfor %}

app.py

import pymongo
from flask import Flask, request, render_template, redirect

app = Flask(__name__)


# Views
@app.route("/")
@app.route("/<user_name>")

def index():
    return render_template("home.html")

def display_songs(user_name=None):
    song_list = None
    if user_name:
        song_list = list(db.songs.find({"user_name": user_name}))
    else:
        song_list = list(db.songs.find({}))

    return render_template('home.html', song_list=song_list)


@app.route("/add-songs")
def add_songs():
    return render_template("addSongs.html")


@app.route("/delete-songs")
def delete_songs():
    return render_template("deleteSongs.html")


@app.route("/search-songs")
def search_songs():
    return render_template("searchSongs.html")


# Form methods
@app.route("/api/add-songs", methods=["POST"])
def addSongs():
    user_name = request.form["user_name"]
    song_name = request.form["song_name"]
    db.songs.insert_one({"user_name": user_name, "song_name": song_name})
    return redirect("/")


@app.route("/api/delete-songs", methods=["POST"])
def deleteSongs():
    user_name = request.form["user_name"]
    song_name = request.form["song_name"]
    db.songs.delete_one({"user_name": user_name, "song_name": song_name})
    return redirect("/")


@app.route("/api/search-songs", methods=["POST"])
def searchSongs():
    user_name = request.form["user_name"]
    return redirect("/" + user_name)


# Connecting to local host
connection = pymongo.MongoClient("mongodb://localhost:27017")
db = connection["test_database"]

python html 模板 flask web 应用程序

评论


答:

3赞 ilias-sp 10/24/2023 #1

in your home.html 模板旨在包含将注入到 base.html 字符串中的 html 代码。您需要移动模板末尾的结束标记。{% block content %}{% endblock content %}{% block content %}{% endblock content %}{% endblock content %}

home.html:

{% extends 'base.html' %}
{% block content %}
    {% for song in song_list%}
    <div>
      <p>Music Name: {{song["song_name"]}}</h1>
      <p>user: {{song["user_name"]}}</p>
    </div>
    <br>
    {% endfor %}
{% endblock content %}