如何在Django中通过onchange事件传递select的选中值?
问题解决:Django下拉框选中跳转传递值
你的写法行不通,因为Django的{% url %}标签是服务器端渲染时执行的,而this.value是浏览器端的JavaScript变量,服务器渲染页面时根本无法获取这个值,所以模板标签没法正确生成目标URL。
下面给两种可行的实现方式:
方式1:用模板标签生成基础URL后替换参数(推荐)
这种方式不会硬编码URL路径,适配Django路由的变化:
<main> <section class="topbar"> <select name="category" id="category" onchange="handleCategorySelect(this)"> <option value="none">All category</option> <option value="book">Books</option> <option value="notes">Notes</option> <option value="fur">Furniture</option> <option value="draw">Drawing tools</option> <option value="others">Others</option> </select> </section> </main> <script> function handleCategorySelect(selectEl) { const selectedVal = selectEl.value; if (selectedVal === 'none') { // 全部分类的跳转地址,根据你的需求修改,比如首页 location.href = '/'; } else { // 用模板标签生成带占位符的URL,再替换为选中值 const baseUrl = "{% url 'searchbycategory' 'temp' %}"; location.href = baseUrl.replace('temp', selectedVal); } } </script>
方式2:直接JS拼接URL(简单但硬编码)
如果你的路由路径不会轻易变动,可以直接写死路径拼接:
<main> <section class="topbar"> <select name="category" id="category" onchange="location.href='/searchbycategory/' + this.value"> <option value="none">All category</option> <option value="book">Books</option> <option value="notes">Notes</option> <option value="fur">Furniture</option> <option value="draw">Drawing tools</option> <option value="others">Others</option> </select> </section> </main>
注意:如果value="none"需要跳转到全部分类页面,记得单独处理,避免生成/searchbycategory/none的无效路由。
内容的提问来源于stack exchange,提问作者LoneRanger
相关产品推荐
相关产品推荐

