当前路径具有子目录或 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)的主要内容,如果未能解决你的问题,请参考以下文章

./ 和 ~/ 之间的区别

js获取当前域名Url相对路径和参数

js获取当前域名Url相对路径和参数以及指定参数

如何获取当前页面的url地址?

django在url中捕获参数

pwd 显示当前所在的工作路径