【发布时间】:2020-04-23 23:28:53
【问题描述】:
我正在尝试从我传递到烧瓶应用程序的函数中嵌入一个图。
下面的一切都很好,但会在浏览器之外启动绘图。
我已经阅读了很多关于 IO 的内容,但我对如何/在哪里处理它感到困惑。
app.py 中的函数 runBB() 返回 plt.show()。传递从表单中检索的符号后。我应该传递 fig 来在 app.py 中进行 IO 计算,还是应该在包含该函数的文件中进行?
我不想将文件保存在任何地方,因为从多重的角度来看,我希望它是动态的,而不是覆盖保存的文件,我相信这是 IO 解决的问题。
app.py
#Dashboard page
@app.route("/dashboard", methods = ["POST", "GET"])
def dashboard():
if person["is_logged_in"] == True:
return render_template("dashboard.html", email = person["email"], name = person["name"])
else:
return redirect(url_for('login'))
@app.route("/form", methods = ["POST", "GET"])
def form():
if request.method == "POST":
symbol = request.form["symbol"]
bytes_obj = runBB(symbol)
return render_template("dashboard.html", symbol=bytes_obj)
dashboard.html
{% extends "layout.html" %}
{% block content %}
<head>
<title>Welcome</title>
<link rel="stylesheet" type="text/css" href="{{url_for('static', filename = 'dashboard.css')}}">
<link rel="stylesheet" type="text/css" href="../static/dashboard.css">
</head>
<body>
<div class="main">
<h1 class="name">Hi, {{name}}</h1>
<form action="{{ url_for('form') }}" method ="POST">
<p><input placeholder="Enter your symbol" type="text" name="symbol"></p>
<p><input type="submit" value="Run Report" class="btn-default"></p>
</form>
<P>{{bytes_obj}}</P>
<!-- <hr style="width: 30%"> -->
<h3 class="email">{{email}}</h3>
</div>
</body>
{% endblock %}
有人能指出正确的方向吗?
我试图理解其他类似的 stackoverflow 问题,但似乎无法理解或将其放在一起。
【问题讨论】:
-
看看这个答案:stackoverflow.com/a/41460112/42346 这是你完成这项工作的一种方法。
-
网页的工作方式与桌面程序不同,matplotlib 是为在桌面上工作而创建的,而不是在网页上工作。但是有一个模块 mpl3d 使用 javascript 模块 D3.js 为 HTML 页面生成 Matplotlib 图。
-
@mechanical_meat 那么我是否可以让函数返回 plt,这样当我在 app.py 中调用该函数时,我可以获取 plt 并将其保存在 app.py 中?
-
@rossinbossin:比这更复杂一点。或者,也许像 furas 所说的那样研究 mpl3d。
-
@furas 我研究了 mpld3 并尝试了一些我可能需要重新审视的概念。
标签: python matplotlib flask