Flask应用无法正常显示Firebase中items数据问题求助
Flask中Firebase数据的items字段显示异常问题
问题描述
树莓派连接称重传感器、超声波传感器和PIR传感器,检测到运动时将读数发送到Flask应用实时显示,同时存储到Firebase实时数据库。编写获取每日最新读数的函数后,除作为整数计数器的items字段外,其他数据均正常显示,报错信息如下:
<built-in method items of dict object at 0x7f7de1cbc0>
推测items字段被识别为字典内置方法,但无法找到解决办法。
获取每日最新数据的函数
def fetch_latest_data_each_day(): ref = db.reference('Smart Bin') all_data = ref.get() latest_entries = {} if all_data: for key, value in all_data.items(): date_part = key.split('_')[0] if date_part not in latest_entries or key > latest_entries[date_part]['timestamp']: # Parse and format the timestamp before storing it timestamp = datetime.strptime(key, '%Y-%m-%d_%H-%M-%S') formatted_timestamp = timestamp.strftime('%Y-%m-%d at %H:%M:%S') latest_entries[date_part] = { 'timestamp': formatted_timestamp, # Store the formatted timestamp 'data': value } return latest_entries
前端模板代码(index.html)
<div class="historical-data"> <h1>Historical Data</h1> {% for date, info in latest_entries.items() %} <div class="historical-entry"> <h2>Date: {{ date }}</h2> <div class="data"> <strong>Time of latest record:</strong> <span>{{ info.timestamp }}</span> </div> <div class="data"> <strong>Distance:</strong> <span>{{ info.data.distance }} cm</span> </div> <div class="data"> <strong>Weight:</strong> <span>{{ info.data.weight }} grams</span> </div> <div class="data"> <strong>Items:</strong> <span>{{ info.data.items }}</span> </div> </div> {% endfor %} </div>
最新数据结构示例
{ '2024-06-22': {'timestamp': '2024-06-22 at 21:04:57', 'data': {'distance': 120, 'items': 2, 'weight': 0}}, '2024-06-23': {'timestamp': '2024-06-23 at 21:27:32', 'data': {'distance': 170.8, 'items': 2, 'weight': 0}}, '2024-06-24': {'timestamp': '2024-06-24 at 01:43:02', 'data': {'distance': 170.47, 'items': 2, 'weight': 0}}, '2024-06-28': {'timestamp': '2024-06-28 at 11:50:32', 'data': {'distance': 171.52, 'items': 2, 'weight': 15587}} }
已尝试操作
使用info.data.items[0]索引访问,页面显示空白。
解决方案
问题根源是Jinja2模板语法冲突:items是Python字典的内置方法名,模板中{{ info.data.items }}会被优先解析为调用字典的items()方法,而非读取字段值。提供两种解决方式:
方式1:修改字段名(推荐)
将Firebase中存储的items字段名改为不与内置方法冲突的名称,比如item_count,之后模板中对应修改为:
<div class="data"> <strong>Items:</strong> <span>{{ info.data.item_count }}</span> </div>
方式2:模板中通过键名索引访问
保持字段名不变,修改模板代码,通过字典键索引的方式明确读取字段值:
<div class="data"> <strong>Items:</strong> <span>{{ info.data['items'] }}</span> </div>
内容的提问来源于stack exchange,提问作者SharpBlade
相关产品推荐
相关产品推荐

