Flask分页开发遇AttributeError:'function'对象无'args'属性
问题修复方案
核心错误原因
触发AttributeError的直接原因有两个:
request.args.get是Flask提供的方法,必须用括号()调用,你错误使用了方括号[],导致Python将get当作函数的属性访问,从而抛出错误。- 检查
page参数是否存在的写法冗余,request.args是特殊的字典类型,直接用get方法设置默认值更简洁高效。
修正后的关键代码
将分页相关代码替换为以下内容:
# 从数据库结果中提取图片URL(需根据sheet1表的实际结构调整索引,比如图片URL在第2列就用row[1]) image_urls = [row[1] for row in rows] # 处理分页逻辑 page = request.args.get(get_page_parameter(), type=int, default=1) per_page = 12 offset = (page - 1) * per_page current_page_urls = image_urls[offset:offset+per_page] pagination = Pagination(page=page, per_page=per_page, total=len(image_urls), css_framework='bootstrap4')
其他潜在问题修复
- 原代码中
image_urls未定义就直接使用,会触发NameError,必须先从rows中提取对应字段。 - 你导入了
get_page_parameter但未使用,用它可以统一分页参数名,避免硬编码'page'。 - 全局数据库连接和游标可能因长时间保持连接导致超时,建议在视图函数内创建并关闭连接。
完整修正后的视图函数示例
@app.route('/') def thumbnails(): # 在视图内创建数据库连接,避免全局连接超时 db = mysql.connector.connect(user=app.config['MYSQL_USER'], password=app.config['MYSQL_PASSWORD'], host=app.config['MYSQL_HOST'], database=app.config['MYSQL_DB']) cursor = db.cursor() # 从数据库获取数据 cursor.execute('SELECT * FROM sheet1') rows = cursor.fetchall() cursor.close() db.close() # 提取图片URL(根据表结构调整索引) image_urls = [row[1] for row in rows] # 分页处理 page = request.args.get(get_page_parameter(), type=int, default=1) per_page = 12 offset = (page - 1) * per_page current_page_urls = image_urls[offset:offset+per_page] pagination = Pagination(page=page, per_page=per_page, total=len(image_urls), css_framework='bootstrap4') # 传递数据到模板 return render_template('index.html', rows=rows, current_images=current_page_urls, pagination=pagination)
内容的提问来源于stack exchange,提问作者Rohit
相关产品推荐
相关产品推荐

