当前路径具有子目录或 url 参数时,使用 AJAX 调用视图函数不起作用(Django)
Posted
技术标签:
【中文标题】当前路径具有子目录或 url 参数时,使用 AJAX 调用视图函数不起作用(Django)【英文标题】:Calling a view function with AJAX not working when current path has sub directory or url parameter (Django) 【发布时间】:2020-01-17 08:35:11 【问题描述】:当我的页面加载以返回计数值(篮子中的项目数)时,我正在使用 AJAX 调用视图函数。这适用于我的大多数 url 路径,但是当当前路径具有子目录或 url 参数值时,我会收到 404 错误。
以下是我的一些网址格式。最下面的是我调用的返回计数值的视图函数。当我访问“订单”路径时,篮子计数成功返回,但对于“订单历史”和“查看订单”路径,我得到 404,例如'未找到:/view_order/basket_count'
path("my_orders", views.orders, name="orders"),
path("my_orders/history", views.order_history, name="order_history"),
path("view_order/<int:id>", views.view_order, name="view_order"),
path("basket_count", views.basket_count, name="basket_count"),
对 Python/Django 来说非常新,所以我确定我在这里没有掌握一些非常基本的东西,并且 url 模式没有正确解析。我之前在另一个名为 utils.py 的文件中拥有了 basket_count,并使用 utils.basket_count 引用了它,它给出了相同的结果。我想我可以在我的每个视图中调用该函数,但我的目的是尝试 AJAX。我的 url 模式是否有一个简单的更改可以解决我当前设置的这个问题,还是只是不好的做法?
我的 AJAX 代码
document.addEventListener('DOMContentLoaded', function()
var basket_count = new XMLHttpRequest();
basket_count.open('GET', '/basket_count/', true);
basket_count.send();
basket_count.onload = function()
var count = JSON.parse(basket_count.responseText);
if (count.count > 0)
document.getElementById('nav_basket_count').innerhtml = ' [' + count.count + ']';
else
document.getElementById('nav_basket_count').innerHTML = '';
;
);
【问题讨论】:
发布你的 Ajax 兄弟。我假设问题就在那里。 您在这里没有真正提供足够的信息(您的 Ajax 代码在哪里?)但我怀疑问题根本与 Python 或 Django 无关,而与 URL 路径有关;您总是希望请求以斜杠开头的路径,例如/basket_count
而不仅仅是 basket_count
。
@Jay 谢谢,你是对的!刚刚解决它并将更新我的帖子。在我的 AJAX 函数调用中不正确使用正斜杠!
@DanielRoseman 谢谢,你说得对!
【参考方案1】:
问题出在我的 AJAX 代码上。我在 url 中有一个尾部正斜杠,而开头应该只有一个,如下所示。
basket_count.open('GET', '/basket_count', true);
【讨论】:
以上是关于当前路径具有子目录或 url 参数时,使用 AJAX 调用视图函数不起作用(Django)的主要内容,如果未能解决你的问题,请参考以下文章