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
相关产品推荐
相关产品推荐

