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

如何在Django中将表单输入值传递给URL变量

解决Django表单输入值传递到URL变量的问题

当前代码的核心问题是:模板标签{% url 'Main:search' %}在页面渲染时生成固定URL,无法动态获取用户输入的ticker值。以下两种方案可解决该问题:

方案一:通过表单GET提交传递参数(推荐)

这种方式更贴合Django表单处理逻辑,无需前端JS介入:

  1. 修改前端表单代码
    将表单改为GET提交,用提交按钮替代原<a>标签:
<form method="get" action="{% url 'Main:search' %}">
  <div class="input-group">
    <input type="text" name="ticker" class="form-control" placeholder="Search" required>
    <div class="input-group-btn">
      <button type="submit" class="btn btn-default">
        <i class="bi bi-search"></i>
      </button>
    </div>
  </div>
</form>
  1. 调整urls.py路由配置
    移除路径中的ticker变量,改为通过GET参数接收:
app_name = 'Main'
urlpatterns = [
    path("", views.index, name='index'),
    path('search/', views.search, name='search'),
]
  1. 更新views.py视图函数
    从request.GET中提取ticker参数:
def search(request):
    ticker = request.GET.get('ticker', '').upper()
    if not ticker:
        return redirect('Main:index')  # 处理空输入场景
    result = Symbol.objects.filter(symbol=ticker).first()
    if result is not None:
        return redirect('Symbol:index', ticker=ticker)
    else:
        return render(request, 'symbol_not_found.html')

方案二:用JavaScript动态生成带参数的URL

若需保持ticker在URL路径中(如/search/AAPL),可通过JS动态修改链接地址:

  1. 更新前端代码
    给输入框和链接添加ID,通过JS监听点击事件拼接URL:
<form>
  <div class="input-group">
    <input type="text" id="ticker-input" name="ticker" class="form-control" placeholder="Search">
    <div class="input-group-btn">
      <a id="search-link" href="{% url 'Main:search' %}" class="btn btn-default">
        <i class="bi bi-search"></i>
      </a>
    </div>
  </div>
</form>

<script>
document.getElementById('search-link').addEventListener('click', function(e) {
  const ticker = document.getElementById('ticker-input').value.trim().toUpperCase();
  if (!ticker) {
    e.preventDefault();
    alert('请输入要搜索的代码');
    return;
  }
  // 拼接带ticker参数的完整URL
  this.href = `${this.getAttribute('href')}${ticker}`;
});
</script>
  1. 保持原有路由和视图不变
    urls.py中的path('search/<ticker>', views.search, name='search')和views.py中的def search(request, ticker):无需修改。

注意:该方案需确保用户输入的ticker不含URL非法字符,必要时需添加转义处理。


内容的提问来源于stack exchange,提问作者Ahmed B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:40:15