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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:57:19