如何在Flask中遍历SQLite表并在HTML页面正确展示数据?
解决Flask页面无法渲染数据库eventdetails表数据的问题
核心问题是views.py的home路由未从数据库查询数据并传递给模板,导致Jinja2循环无数据可渲染。以下是具体解决步骤:
1. 修改views.py,添加数据库查询与数据传递
在home路由中查询所有EventDetails记录,并将结果通过render_template传递给模板:
from flask import render_template from .models import EventDetails from . import app @app.route('/') def home(): # 查询eventdetails表的所有记录 events = EventDetails.query.all() # 将查询结果传入模板,变量名events需与模板中的循环变量一致 return render_template('home.html', events=events)
2. 确认home.html的Jinja2循环语法正确
确保模板中使用正确的变量名循环渲染name字段,示例如下:
<h1>活动名称列表</h1> <ul> {% for event in events %} <li>{{ event.name }}</li> {% endfor %} </ul>
注意:模板中的循环变量events必须与views.py中传递的变量名完全匹配。
3. 验证基础配置正确性
- 确认
__init__.py已完成Flask应用与数据库的初始化,包含类似代码:
from flask import Flask from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() def create_app(): app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///your_database.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db.init_app(app) with app.app_context(): from . import views db.create_all() # 确保表已创建 return app
- 确认
models.py中的EventDetails类正确映射到eventdetails表:
from . import db class EventDetails(db.Model): __tablename__ = 'eventdetails' # 指定对应数据库表名 id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100), nullable=False) # 其他字段根据实际需求定义
完成以上修改后,重启Flask应用,home页面即可渲染出eventdetails表中所有记录的name字段。
内容的提问来源于stack exchange,提问作者jin
相关产品推荐
相关产品推荐

