Django模板通过AJAX定时刷新值时出现404 URL未找到错误排查
问题排查与修复方案
核心问题:404错误的根源
你的/ajax_data请求出现404,是因为urls.py中没有配置该路径的路由,Django找不到对应的视图函数处理请求。下面是完整的修复步骤:
1. 配置AJAX路由(解决404)
在urls.py中添加ajax_data的路由,同时补充视图函数的导入:
# urls.py from main.views import IndexPageView, ChangeLanguageView, ControlPageView, ViewPageView, ajax_data # 新增ajax_data导入 urlpatterns = [ # 保留原有所有路由 path('ajax_data/', ajax_data, name='ajax_data'), # 新增该路由配置 ]
2. 完善视图函数(避免运行报错)
补充views.py缺失的依赖导入,同时修复潜在的索引越界问题:
# views.py import random import json from django.http import Response # 必须导入Response类 temp_values = [1, 2, 3, 3, 4, 5, 5, 6, 6, 7] def get_temp(): # 改为动态获取列表长度,避免索引越界 return temp_values[random.randint(0, len(temp_values)-1)] def ajax_data(request): # 新增request参数,Django视图必须接收该参数 data = {'temp': get_temp()} json_data = json.dumps(data) # 替换已废弃的mimetypes为content_type return Response(json_data, content_type='application/json')
3. 修复前端AJAX逻辑(实现温度更新)
调整control.html中的JS代码,处理响应数据、修正选择器、匹配需求的更新间隔:
<script src="http://code.jquery.com/jquery-3.0.0.js"></script> <script language="javascript" type="text/javascript"> function updateValue() { $.ajax({ url:"/ajax_data/", // 与urls.py配置的路径保持一致 success: function(response) { var tempData = JSON.parse(response); // 用val()设置输入框值(而非placeholder),修正选择器为.curr_temp(类选择器需加.) $(".curr_temp").val(tempData.temp); } }); } $(document).ready(function(){ // 改为10000毫秒(10秒),移除冗余变量避免冲突 setInterval(updateValue, 10000); }); </script>
4. 额外优化建议
- 删除
ControlPageView中冗余的index方法,TemplateView默认已实现基础的请求处理逻辑; - 前端的开关checkbox建议添加
name和id属性,方便后续功能扩展; - 可使用
$.getJSON简化AJAX请求代码:function updateValue() { $.getJSON("/ajax_data/", function(data) { $(".curr_temp").val(data.temp); }); }
内容的提问来源于stack exchange,提问作者xerxes01
相关产品推荐
相关产品推荐

