Django如何将查询结果渲染输出为单个下拉选择菜单
问题根源
你的模板中{% for lng_l in long_list %}循环包裹了整个表单、输入控件、datalist容器,循环每执行一次就会生成一套独立的表单+输入框+仅包含单条邮轮标题的datalist,最终就会出现页面有多个输入控件、每个下拉菜单仅含单条数据的异常。
现有models.py和views.py的逻辑无需调整,只需要修改模板文件即可实现需求。
修正方案
- 将表单、输入框、datalist标签整体移到for循环外部,保证页面只生成1个输入控件和1个datalist容器
- 仅把
<option>标签放在for循环内部,遍历所有邮轮标题生成下拉选项 - 修正原模板中错误的注释写法(原代码写的
<!label属于无效注释,Django模板单行注释推荐使用{# 注释内容 #}格式,避免渲染异常)
修正后的basic.html代码
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Cruises</title> </head> <body> <h1> Cruise Control </h1> <form action="/action_page.php"> <label for='destination'>Destination</label> <input type="text" list="destination" /> <datalist id="destination"> {% for lng_l in long_list %} <option>{{lng_l.title}}</option> {% endfor %} </datalist> {# 后续日期选择、提交按钮等控件直接在此处添加即可,无需放入循环 #} {# <label for="cruisetime">Departure date</label> <input type="date" id="cruisetime" name="cruisetime" min={{dep_l.departureDate}}> <input type="submit"> #} </form> </body> </html>
修改后页面只会渲染1个输入框,触发下拉时即可展示所有采集到的邮轮标题供用户选择。
内容的提问来源于stack exchange,提问作者tesla john
相关产品推荐
相关产品推荐

