我正在尝试提供静态html文件,但返回500错误 (editor.html的副本位于.py和templates目录中) 这就是我所尝试过的:
from flask import Flask
app = Flask(__name__, static_url_path='/templates')
@app.route('/')
def hello_world():
#return 'Hello World1!' #this works correctly!
#return render_template('editor.html')
#return render_template('/editor.html')
#return render_template(url_for('templates', filename='editor.html'))
#return app.send_static_file('editor.html') #404 error (Not Found)
return send_from_directory('templates', 'editor.html')
这是回复:
Title: 500 Internal Server Srror
Internal Server Error
The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.
答案 0 :(得分:17)
将其简化为最简单的方法:
static
子文件夹。static_url_path
。/static/
访问静态内容以验证文件是否正常工作如果您仍然想要重复使用静态文件,请使用current_app.send_static_file()
,并且不要使用前导/
斜杠:
from flask import Flask, current_app
app = Flask(__name__)
@app.route('/')
def hello_world():
return current_app.send_static_file('editor.html')
这将在editor.html
文件夹中直接查找文件static
。
这假设您将上述文件保存在文件夹中,该文件夹中包含static
个子文件夹,文件夹editor.html
位于该子文件夹中。
进一步说明:
static_url_path
更改了 URL 静态文件,而不是用于加载数据的文件系统上的位置。render_template()
假设您的文件是Jinja2模板;如果它实际上只是一个静态文件那么就是过度杀戮而可能会导致错误,如果该文件中存在实际可执行语法有错误或缺少上下文。答案 1 :(得分:1)
所有答案都是好的,但对我而言,行之有效的只是使用Flask中的简单功能send_file
。当 host:port / ApiName 将在浏览器中显示文件的输出
@app.route('/ApiName')
def ApiFunc():
try:
#return send_file('relAdmin/login.html')
return send_file('some-other-directory-than-root/your-file.extension')
except Exception as e:
logging.info(e.args[0])```
答案 2 :(得分:0)
send_from_directory
和send_file
必须从import
flask
开始。
如果执行以下操作,您的代码示例将起作用:
from flask import Flask, send_from_directory
app = Flask(__name__, static_url_path='/templates')
@app.route('/')
def hello_world():
return send_from_directory('templates', 'editor.html')
但是,请记住该文件是否加载了其他文件,例如javascript,css等。您也必须为其定义路由。
据我所知,这不是生产中推荐的方法,因为它很慢。