You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 23:49:51