无法在本地的 Flask 中获取正确的 url_for 静态文件
Can't get the right url_for static file in Flask locally
我有一个网络服务器可以满足我的需要,但为了开发应用程序,我希望我的一些静态文件在本地提供。
例如,我有 /Desktop/project_folder/static/jsons/example.json。
我试试:
print(url_for('static', filename='jsons/example.json'))
/static/jsons/example.json
我得到的是/static/jsons/example.json.
我尝试通过以下方式设置 static_path:
app = Flask(__name__, static_folder='/Desktop/project_folder/static')
print(app.static_folder)
/Desktop/project_folder/static
url = url_for('static', filename='jsons/example.json')
print(url)
/static/jsons/example.json
我在这里检查了几十个类似的问题,他们都建议调整 static_folder 或 static_url_path 但这些都没有帮助 - 我刚开始在我拥有的所有其他资源上出现 404 错误我的静态文件夹。我也试过 send_from_directory 但我得到的是 werkzeug.wrappers.Response 对象,我无法从中获取数据。
更新:
我尝试加载此 json 与:
json_loaded = json.load(requests.get(url).text)
并得到一个错误:MissingSchema: Invalid URL '/static/jsons/example.json': No schema supplied.
您需要告诉请求文件所在的位置。一条路是不够的。您还需要包括方案和域、主机名或 IP 地址。只有端口是可选的。
requests.get('http://example.com/path/to/file')
由于您使用 url_for
为您生成 URL,您需要告诉它为您包含此信息。
url_for('static', filename='jsons/example.json', _external=True)
我有一个网络服务器可以满足我的需要,但为了开发应用程序,我希望我的一些静态文件在本地提供。 例如,我有 /Desktop/project_folder/static/jsons/example.json。 我试试:
print(url_for('static', filename='jsons/example.json'))
/static/jsons/example.json
我得到的是/static/jsons/example.json.
我尝试通过以下方式设置 static_path:
app = Flask(__name__, static_folder='/Desktop/project_folder/static')
print(app.static_folder)
/Desktop/project_folder/static
url = url_for('static', filename='jsons/example.json')
print(url)
/static/jsons/example.json
我在这里检查了几十个类似的问题,他们都建议调整 static_folder 或 static_url_path 但这些都没有帮助 - 我刚开始在我拥有的所有其他资源上出现 404 错误我的静态文件夹。我也试过 send_from_directory 但我得到的是 werkzeug.wrappers.Response 对象,我无法从中获取数据。
更新: 我尝试加载此 json 与:
json_loaded = json.load(requests.get(url).text)
并得到一个错误:MissingSchema: Invalid URL '/static/jsons/example.json': No schema supplied.
您需要告诉请求文件所在的位置。一条路是不够的。您还需要包括方案和域、主机名或 IP 地址。只有端口是可选的。
requests.get('http://example.com/path/to/file')
由于您使用 url_for
为您生成 URL,您需要告诉它为您包含此信息。
url_for('static', filename='jsons/example.json', _external=True)