FLASK:在一个 HTML 页面中为多个函数调用多个路由

FLASK : call several routes for several functions in one HTML page

在下面的脚本中,我尝试通过 FLASK 以 HTML 格式调用我主页中的几个函数。每个函数计算我想在主页上的 table 中显示的待定数量。为此,我有:

不幸的是,当我 运行 Flask 时,什么也没有发生。我的网页上仍有 $$number1$$ 或 $$number2$$。

能否请您帮我更正以下脚本:

Python代码:

import flask
import csv
import pandas as pd
import numpy as np
app = flask.Flask("app_monitoringissues")

def get_html(page_name):
html_file = open(page_name + ".html")
content = html_file.read()
html_file.close()
return content

@app.route("/homepage/<count_pending1>")
def count_pending1():
html_page = get_html ("homepage")
df = pd.read_csv("sortdata.csv")
count1 = len(df[df["Status_Issue"].astype(str).str.contains("Pending-to be checked")])
count2 = df["Status_Issue"].isna().sum()
result1 = count1 + count2
return html_page.replace("$$NUMBER1$$", str(result1))

@app.route("/homepage/<count_pending2>")
def count_pending2():
html_page = get_html ("homepage")
df = pd.read_csv("sortdata.csv")
count1 = len(df[df["Status_Issue"].astype(str).str.contains("Pending CP")])
result2 = count1
return html_page.replace("$$NUMBER2$$", result2)

HTML代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Homepage</title>
</head>
<body>
<div class = "head">
<h1 id = "title homepage"> monitoring screen</h1>
<div class = "tablesupervisionarea">
    <table class="tablesupervision">
        <thead class ="theadsupervision">
            <tr>
                <th>Pending Supervision</th>
                <th> </th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <th>Need to be checked by Tax Regulatory</th>
                <td><ol>$$NUMBER1$$</ol></td>
            </tr>
            <tr>
                <th>Pending with CP</th>
                <td><ol>$$NUMBER2$$</ol></td>
            </tr>
            <tr>
        </tbody>
    </table>
</div>

这不是您使用 Flask 的方式。请改用 render_template。先看看 doc 来理解这个概念。

例如,这个函数:

@app.route("/homepage/<count_pending2>")
def count_pending2():
html_page = get_html ("homepage")
df = pd.read_csv("sortdata.csv")
count1 = len(df[df["Status_Issue"].astype(str).str.contains("Pending CP")])
result2 = count1
return html_page.replace("$$NUMBER2$$", result2)

应该看起来像:

@app.route("/homepage/<count_pending2>")
def count_pending2():
    df = pd.read_csv("sortdata.csv")
    result = len(df[df["Status_Issue"].astype(str).str.contains("Pending CP")])
    return render_template("homepage.html", result=result)

并在相关的 HTML 模板中,添加这样的标签,该标签将被替换为适当的值:

{{ result }}

看看文档,很容易理解。 如果我可以建议,请尝试改进变量和函数名称的 命名 :count_pending1/2 等都非常相似,并且不提供有关函数用途的任何线索。代码应该更明确 - 在您查看函数之前,它应该做什么就应该很明显。

当您需要审查代码时,使用有意义的名称可以立即找到您要编辑的相关部分,这将大有帮助。您已经拥有两个名称几乎相同且非常相似的函数。问问自己是否真的需要两个或更多功能。也许一个带有条件块的简单函数比重复代码和使整个程序变得更长更有意义。