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

Django中多同名城市UN/LOCODE查询结果如何在前端循环展示

问题根因

当前实现存在两个逻辑偏差,直接导致了仅显示最后一条匹配结果、单字符串被拆成字符输出的现象:

  • 遍历远程UN/LOCODE数据源做城市名匹配时,直接用独立变量(site_code/country_code/state)存储单条匹配结果,每轮循环都会覆盖上一轮的变量值,最终传给模板的上下文里只剩循环结束时的最后一条匹配项
  • 模板中对单字符串类型的site_code做for循环渲染时,Django模板引擎会将字符串默认可迭代对象处理,逐字符遍历输出,自然会把代码拆成单个字符展示
修复方案

1. 调整视图层的数据收集逻辑

放弃用独立单值变量存匹配结果的写法,改用列表承接所有匹配条目,确保所有同名城市的信息都能被完整保留:

# 视图内核心逻辑替换
# 初始化空列表存放所有匹配结果
matched_entries = []
search_city = request.GET.get("city", "").strip()
# 保留原有请求远程JSON数据源的逻辑
remote_locode_data = your_existing_fetch_logic()

for entry in remote_locode_data:
    # 保留原有的城市名匹配规则即可
    if entry.get("city_name", "").strip().lower() == search_city.lower():
        # 每匹配到一条,就把完整条目打包成字典追加到列表
        matched_entries.append({
            "site_code": entry["locode"],
            "country_code": entry["country"],
            "state": entry["state_province"]
        })

# 将完整的匹配列表传入模板上下文
return render(request, "home.html", {
    "matched_entries": matched_entries,
    "search_keyword": search_city
})

2. 修正模板的渲染逻辑

不再对单个字符串变量做循环,直接遍历传入的匹配结果列表,逐条目展示信息即可:

<!-- home.html 渲染片段 -->
{% if matched_entries %}
  <div class="result-list">
    <p>共匹配到 {{ matched_entries|length }} 个同名城市结果:</p>
    <ul>
      {% for item in matched_entries %}
        <li>
          UN/LOCODE代码:<span class="code">{{ item.site_code }}</span>
          <br>所属国家:{{ item.country_code }}
          <br>所属州/省:{{ item.state }}
        </li>
      {% endfor %}
    </ul>
  </div>
{% else %}
  <p>未查询到与「{{ search_keyword }}」匹配的UN/LOCODE记录</p>
{% endif %}
效果验证

按照上述逻辑修改后,查询Stoughton这类跨区域同名城市时,MA、WI对应的两条LOCODE条目会全部被收录进matched_entries列表,模板会逐行展示完整条目,不会出现变量覆盖、字符拆分的问题。

内容的提问来源于stack exchange,提问作者Collin Clark

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 00:06:01