Django中/LS/mark-text-responses/ URL AJAX请求404问题求助
Django AJAX请求返回404:URL路径不匹配问题解决
从服务器日志可明确:前端实际发送的请求URL是/mark-text-responses/,但后端配置的有效URL是/LS/mark-text-responses/,同时前端代码硬编码的请求路径是/lessons/mark-text-responses/——三者完全不匹配,这就是404错误的核心原因。
解决方案
方案1:直接修正前端硬编码URL路径
将JavaScript中fetch的请求路径替换为后端实际配置的URL:
// 原代码 fetch('/lessons/mark-text-responses/', { ... }) // 修改后 fetch('/LS/mark-text-responses/', { ... })
方案2:使用Django模板标签生成URL(推荐)
避免硬编码URL导致的路径不一致问题,利用Django的{% url %}模板标签动态生成正确路径:
- 如果JavaScript代码直接写在Django模板文件中,直接替换为:
fetch("{% url 'mark_text_responses' %}", { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRFToken': document.querySelector('input[name="csrfmiddlewaretoken"]').value }, body: JSON.stringify({ activity_id: '{{ activity.id }}', question_index: index, text_response: textResponse }) })
- 如果JavaScript是单独的外部文件,可在模板中通过全局变量传递URL:
<!-- 在模板的<script>标签中定义全局变量 --> <script> const MARK_TEXT_RESPONSES_URL = "{% url 'mark_text_responses' %}"; </script> <!-- 引入外部JS文件 --> <script src="{% static 'js/your-script.js' %}"></script>
然后在外部JS中使用该变量:
fetch(MARK_TEXT_RESPONSES_URL, { ... })
额外验证步骤
- 确认项目根
urls.py已将LM应用的URL挂载到/LS/路径下:
# 根urls.py from django.urls import path, include urlpatterns = [ # ... path('LS/', include('LM.urls')), # ... ]
- 修改后刷新页面,点击提交按钮,查看浏览器开发者工具「网络」面板,确认请求URL为
/LS/mark-text-responses/且返回状态码200。
内容的提问来源于stack exchange,提问作者Sam N
相关产品推荐
相关产品推荐

