是否可以仅在我的 Flask 应用程序创建文件后才显示下载按钮?使用 PHP,它可能是这样的:
<style>
.hidden{ display:none;}
</style>
<?php
if(!file_exists("path") ){ $class = "hidden" }
echo "<button type=\"submit\" onclick=\"window.open(\'file.txt\')\">Download!</button>";
?>
我尝试直接在 HTML 文件中使用 Python 代码:
{% if os.path.isfile('file.txt') %}
<button type="submit" onclick="window.open('file.txt')">Download!</button>
{% else %}
<button type="submit" class="hidden" onclick="window.open('file.doc')">Download!</button>
{% endif %}
但出现错误:
jinja2.exceptions.UndefinedError: 'os' is undefined
更新
@furas 回复后的完整代码。代码应该做什么:
创建一个新线程,该线程将写入文件。
模板已呈现,并带有隐藏的下载按钮。
文件已创建
下载按钮自动可见 - 因为现在文件存在。
然而,在下面的代码中,该按钮在文件写入后保持隐藏状态。仅当创建文件后重新加载页面时,该按钮才会显示。
app.py
from flask import Flask, render_template
import threading
import time
import os
global exporting_threads
class ExportingThread(threading.Thread):
def run(self):
time.sleep(1)
file = open("file.txt", "w")
file.close()
app = Flask(__name__)
app.debug = True
@app.route('/')
def index():
exporting_threads = ExportingThread()
exporting_threads.start()
return render_template('index.html', file_exist = os.path.isfile('file.txt'))
if __name__ == '__main__':
app.run()
index.html,位于“templates”文件夹内。
<!DOCTYPE html>
<html>
<head>
<style>
.hidden{ display:none;}
</style>
</head>
<body>
{% if file_exist %}
<button type="submit" onclick="window.open('file.doc')">Download!</button>
{% else %}
<button type="submit" class="hidden" onclick="window.open('file.doc')">Download!</button>
{% endif %}
</body>
</html>
绝地无双
相关分类