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

Django中Ajax请求未执行urls.py指定的views.py对应函数问题

问题根因

Django的URL路由匹配是从上到下按顺序匹配,命中第一个符合规则的路径就会终止匹配,不会再继续向后查找。你当前的urls.py中,带动态参数的path('<str:scientific>', ...)规则放在了path('update', ...)的前面,当你请求/update路径时,Django会把字符串update识别为scientific参数的值,直接匹配到itemAlt路由,调用当前页面的视图返回HTML,根本不会执行后面的item_update函数。

排查步骤

  • 先打开浏览器开发者工具的「网络」标签,找到你发的AJAX请求,确认请求的目标URL确实为/update,排除前端data-ajax-url渲染错误的问题
  • 临时修改urls.py,把path('update', views.item_update, name='item-update')整行剪切到path('<str:scientific>', views.reptile_itemAlt, name='itemAlt')的前面,重新发送AJAX请求,看是否能正常返回JSON格式数据

最终解决方案

推荐选择以下任意一种方案解决,避免后续再出现类似的路由冲突:

  1. 调整路由顺序:把所有固定路径的规则(比如update、edit、search这类没有动态参数的路径)全部放在带动态参数的规则前面,确保固定路径优先被匹配
  2. 给动态路径加前缀:修改itemAlt路由规则,增加固定前缀避免和其他路径冲突,示例:
    path('reptile/<str:scientific>', views.reptile_itemAlt, name='itemAlt'),
    
  3. 限制动态参数格式:如果你的scientific参数有固定的格式规则,可以用re_path写正则限制参数格式,避免匹配到update这类固定路径名

验证方法

修改完路由后,可以直接在浏览器地址栏访问/update路径,如果返回的是JSON格式的报错(因为没传POST参数)而不是普通页面HTML,就说明路由已经匹配正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:45:00