Flask中render_template无响应问题排查求助
Flask中render_template无法加载模板文件的问题排查与修复
问题描述
大型Flask程序调用render_template无法加载指定HTML文件,精简测试代码后问题仍存在,且无任何报错。已确认HTML文件位于templates文件夹,同时通过app = Flask(__name__, template_folder='../templates')指定了模板路径。
测试环境与代码
项目结构
Documents static\ templates\ renderindex.html rendertest.py
测试用Python代码
from flask import Flask, render_template from replit import web app = Flask(__name__, template_folder='../templates') @app.route('/') def index(): return render_template('renderindex.html',username=web.auth.name,userid=web.auth.user_id)
测试用HTML代码
<body> <main> <h1>Templating</h1> <!-- Jinja语法调用render_template传入的变量 --> <h2>Hello, {{ username }}!</h2> <p>Your Replit UserID is {{ userid }}.</p> </main> </body>
完整程序中的问题片段
import requests import jwt import datetime import time import json import sys import os from flask import Flask, request, jsonify, render_template app = Flask(__name__, template_folder='templates\\') @app.route('/') def index(): return open('webpage.html').read() @app.route('/store_values', methods=['POST']) def store_values(): data = request.get_json() production_order = data['productionOrder'] print("Production Order:", production_order) production_order = "P50012960" # 调用API请求函数 response_data = make_api_requests(production_order) query_results = json.loads(response_data) print("Query Results:", query_results) # 返回结果页面 return(display_results(query_results)) @app.route('/') def display_results(query_results): return render_template('results.html', data=query_results) def make_api_requests(production_order): # API请求代码 url = 'confidential' authorization_response = requests.post( url, data={ ###confidential } ) if authorization_response.status_code == 200: print('Connected to the API successfully') #print('Response:', authorization_response.text) else: print('Failed to connect to the API. Status code:', authorization_response.status_code) authorization_data = authorization_response.json() access_token = authorization_data["access_token"] print("ACCESS TOKEN:\n") print(access_token) base_url = 'confidential' sql_query = 'confidential' # 构造完整URL url = f"{base_url}/jobs/" # 设置请求头 aheaders = {'Authorization': 'Bearer ' + access_token} aheaders['Content-Type'] = 'text/plain' ##jb aheaders['accept'] = 'application/json' ##jb # 执行SQL查询请求(此部分正常工作) response = requests.post(url, headers=aheaders, data=sql_query) ##jb # 请求结果判断(此部分正常工作) if response.status_code == 200: print('Query executed successfully') print('Response:', response.json()) elif response.status_code == 202: ##新增:状态码202表示查询运行中 print('query is running') print('Response:', response.json()) else: print('Failed to execute the query. Status code:', response.status_code) data = response.json() queryId = data["queryId"] path = data["location"] status = data["status"] result_url = f"{base_url}/jobs/{queryId}/result/" status_url = f"{base_url}/jobs/{queryId}/status/" time.sleep(5) #print('Response:', response.json()) # 获取查询结果的GET请求 status_response = requests.get(status_url, params={"offset": 0, "limit": 100}, headers=aheaders) time.sleep(2) result_response = requests.get(result_url, params={"offset": 0, "limit": 100}, headers=aheaders) time.sleep(2) print("Result response", result_response.status_code) print("Status response", status_response.status_code) # 检查请求是否成功 if result_response.status_code == 200: print('Query results retrieved successfully') print('Response:', result_response.text) # 可根据响应格式解析处理结果(如JSON、CSV) else: print('Failed to retrieve query results. Status code:', result_response.status_code) print('Response:', result_response.text) return result_response.text if getattr(sys, 'frozen', False): template_folder = os.path.join(sys._MEIPASS, 'templates') app.template_folder = template_folder if __name__ == '__main__': TxtPathCurrentFile = os.path.abspath(__file__) TxtPathCurrentDir = os.path.dirname(TxtPathCurrentFile) TxtPathTemplatesDir = os.path.join(TxtPathCurrentDir, 'templates') app.template_folder = TxtPathTemplatesDir #可选:自动打开网页 #webbrowser.open_new("http://127.0.0.1:5000") app.run(debug=False)
问题排查与修复建议
- 路由冲突:完整程序中存在两个
@app.route('/')装饰器的函数(index和display_results),Flask只会识别第一个注册的路由,导致display_results永远不会被调用。需修改路由路径,比如将display_results的路由改为@app.route('/results'),并确保调用时跳转至正确路径。 - 模板路径重复设置:程序中多次设置
app.template_folder,包括初始化、打包判断、主函数中。建议统一使用绝对路径设置,删除其他重复设置,避免相对路径歧义。例如保留主函数中的设置,删除初始化时的template_folder='templates\\'参数。 - 代码缩进错误:
store_values函数内代码缩进混乱,make_api_requests函数内的判断逻辑未正确嵌套在函数内,会导致程序逻辑错误甚至无法运行。需修正所有代码的缩进,确保函数内代码正确嵌套。 - 测试代码路径错误:测试代码中
template_folder='../templates'不符合项目结构,rendertest.py与templates同属Documents目录,相对路径应为'templates',修改后初始化代码为app = Flask(__name__, template_folder='templates')。 - 开启调试模式:临时开启Flask调试模式(
app.run(debug=True)),若存在模板加载错误,会显示详细报错信息,帮助定位问题。
内容的提问来源于stack exchange,提问作者telephony
相关产品推荐
相关产品推荐

