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

Django Ajax请求如何拼接含动态参数的URL路径?

问题描述

我有一个用于从Players模型获取所有球员数据的Django Ajax模板,代码如下:

<body>
   <h1>List of Players:</h1>

   <ul id="display-data">
   </ul>
</body>

<script>
  $(document).ready(function(){
  
      setInterval(function(){
          $.ajax({
              type:"GET",
              url: "{% url 'getPlayers' %}", // 我觉得问题出在这里
              success: function(response){
                  console.log(response);
              },
              error: function(response){
                  alert("An error occured")
              }
          });
      },1000);
  
  })
  
  </script>

但我的urls.py中该模板对应的URL是动态路径:

urlpatterns = [
    path('<str:league_id>/<str:league_title>/draft/', draft, name='draft'),

    path('<str:league_id>/<str:league_title>/getPlayers/', getPlayers, name="getPlayers"),
]
# 包含的基础路径是 /league/

问题在于Ajax函数中设置的url未包含league_id和league_title参数,请问如何在Ajax的url路径中添加这些参数?或者是否是该问题导致我的配置异常?

对应的views.py代码:

def draft(request, league_id, league_title):
    league = League.objects.get(id=league_id)

    context = {'league': league}

    return render(request, 'league/draft.html', context)




def getPlayers(request, league_id):
    league = League.objects.get(id=league_id)
    players = league.available_player.all()

    return JsonResponse({'players': list(players.values())})
解决方案

你的判断完全正确,Ajax请求异常的核心原因就是{% url 'getPlayers' %}没有传入动态URL要求的league_id和league_title参数,Django无法生成合法的URL路径,直接导致请求失败。

下面是两种可行的解决方法:

方法一:利用模板变量生成完整URL

由于draft视图已经将league对象传入模板上下文,直接在Django的url模板标签中传入对应的参数即可:

url: "{% url 'getPlayers' league.id league.title %}",

Django会自动渲染出符合要求的完整URL,比如/league/123/nba/getPlayers/。

方法二:通过JS解析当前URL提取参数

如果不想依赖模板变量,也可以用JavaScript从当前页面URL中解析出所需参数:

// 假设当前页面URL为 /league/123/nba/draft/
const pathSegments = window.location.pathname.split('/');
// 根据实际路径结构调整索引
const leagueId = pathSegments[2];
const leagueTitle = pathSegments[3];
const ajaxUrl = `/league/${leagueId}/${leagueTitle}/getPlayers/`;

// 在Ajax请求中使用该URL
$.ajax({
    type: "GET",
    url: ajaxUrl,
    success: function(response){
        console.log(response);
    },
    error: function(response){
        alert("An error occured")
    }
});

额外修复点

注意你的getPlayers视图存在参数不匹配问题:URL定义了league_id和league_title两个参数,但视图函数只接收league_id,这会触发Django的参数错误。需要修改视图为:

def getPlayers(request, league_id, league_title):
    league = League.objects.get(id=league_id)
    players = league.available_player.all()
    return JsonResponse({'players': list(players.values())})

如果league_title只是URL中的装饰性字段不需要实际使用,可以保留参数但不调用,或者调整URL配置,但必须保证视图参数与URL定义的参数数量一致。

内容的提问来源于stack exchange,提问作者Kaden Miller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:30:46