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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 19:43:12