希望对于比我更有 Flask 经验的人来说,这将是一个简单的问题。我正在提供一个静态文件,我只想在其中附加一些 HTML,或者在一些文本下方提供该文件。有什么办法可以做到这一点,还是我以错误的方式接近它?
@app.route('/compile/<filename>')
def uploaded_file(filename):
return *(Random HTML here)* + send_from_directory(app.config['UPLOAD_FOLDER'], filename)
我尝试的所有操作都会产生错误,我找不到其他任何处理此问题的方法。我想也许可以从 HTML 模板打印文件,但是当我尝试上传文件时它给了我一个错误。任何帮助将不胜感激。
答案 0 :(得分:2)
这个问题可以简化为
@route('/compile/<filename>')
def uploaded_file(filename):
html_prefix = ...
html_suffix = ...
return html_prefix + content(filename) + html_suffix
获取内容的简单方法在哪里
def content(filename)
with open(os.path.join(app.config['UPLOAD_FOLDER'], filename) as f:
return f.read()
错误处理留作练习。如果您需要更改响应的 mimetype(或状态代码为 200 以外的其他内容),请参阅 https://flask.palletsprojects.com/en/1.1.x/quickstart/#about-responses
答案 1 :(得分:1)
我认为您正在寻找的可能是 iFrame
与 send_from_directory
的组合。它用途广泛,易于使用,对我来说最有意义。
@app.route('/compile/<path:filename>')
def uploaded_file(filename):
return send_from_directory(app.config['UPLOAD_FOLDER'], filename)
@app.route('/compile/')
def compile():
return render_template('compile.html')
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Compile</title>
</head>
<body>
<iframe
src="{{ url_for('uploaded_file', filename='example.txt') }}"
style="border: 1px solid black; width:100%;"
></iframe>
</body>
</html>