FLASK:在一个 HTML 页面中为多个函数调用多个路由
FLASK : call several routes for several functions in one HTML page
在下面的脚本中,我尝试通过 FLASK 以 HTML 格式调用我主页中的几个函数。每个函数计算我想在主页上的 table 中显示的待定数量。为此,我有:
- 使用 Panda 从 csv 文件中计算出一些事件。我分别测试了这些功能并且它们有效
- 在我的 HTML 主页上创建了一个 table,其中包含我想显示 csv 文件中事件数量的不同类别
- 使用 html_page.replace 函数将 html table 中的数字 $$numberxx$$ 替换为我在 Python[=28= 中的函数的结果]
- 对于每个函数,我创建了一个路由来指示 HTML link 和相关函数,以便 Flask 可以理解对于这个函数,在计算出结果之后,有必要去在主页上并在 table 中将对象 $$number1$$ 替换为 result1 或将 $$number2$$ 替换为 result2
不幸的是,当我 运行 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 等都非常相似,并且不提供有关函数用途的任何线索。代码应该更明确 - 在您查看函数之前,它应该做什么就应该很明显。
当您需要审查代码时,使用有意义的名称可以立即找到您要编辑的相关部分,这将大有帮助。您已经拥有两个名称几乎相同且非常相似的函数。问问自己是否真的需要两个或更多功能。也许一个带有条件块的简单函数比重复代码和使整个程序变得更长更有意义。
在下面的脚本中,我尝试通过 FLASK 以 HTML 格式调用我主页中的几个函数。每个函数计算我想在主页上的 table 中显示的待定数量。为此,我有:
- 使用 Panda 从 csv 文件中计算出一些事件。我分别测试了这些功能并且它们有效
- 在我的 HTML 主页上创建了一个 table,其中包含我想显示 csv 文件中事件数量的不同类别
- 使用 html_page.replace 函数将 html table 中的数字 $$numberxx$$ 替换为我在 Python[=28= 中的函数的结果]
- 对于每个函数,我创建了一个路由来指示 HTML link 和相关函数,以便 Flask 可以理解对于这个函数,在计算出结果之后,有必要去在主页上并在 table 中将对象 $$number1$$ 替换为 result1 或将 $$number2$$ 替换为 result2
不幸的是,当我 运行 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 等都非常相似,并且不提供有关函数用途的任何线索。代码应该更明确 - 在您查看函数之前,它应该做什么就应该很明显。
当您需要审查代码时,使用有意义的名称可以立即找到您要编辑的相关部分,这将大有帮助。您已经拥有两个名称几乎相同且非常相似的函数。问问自己是否真的需要两个或更多功能。也许一个带有条件块的简单函数比重复代码和使整个程序变得更长更有意义。