Django URL中具有主键的Ajax无法工作

时间:2019-07-15 02:29:05

标签: django url

所有,我正在使用Django做一个社交网站,现在我正在尝试做朋友网络。 我现在遇到的问题是,当我使用Ajax在URL中传递用户ID时,找不到抛出的URL错误,也许看到代码会更清晰。 代码如下

我试图带走awayid,也就是说,带走ajax,url和method中的所有id,然后它就可以工作了。但是如果我在其中添加id参数,那么它将无法正常工作

html template

<button class="add-friend-btn" id="add-friend"> Add friend 

<script src="{% static 'account/js/friends.js'%}" type="text/javascript" ></script>
<script type="text/javascript">
   var userprofilePk = "{{userprofile.pk}}"; // other user's id(primary key)
</script>
{% endif %}

javascript friend.js


$(document).ready(function() {
    var addFriend = document.getElementById('add-friend');

    addFriend.addEventListener("click", function (event) {

         $.ajax({
            type: 'POST',
            headers: { "X-CSRFToken": csrftoken },
            url: "ajax/friend-request/send/"+userprofilePk+"/",
            data: {
                "test": "test",
            },
            dataType: 'json',
            success: function (data) {

            },
            error: function (error) {
            },
         });

    });
});

Django url


urlpatterns = [
    re_path("ajax/friend-request/send/<pk>/", views.send_friend_request, name="user_send_request"),

]
views.py

def send_friend_request(request, id):
    print("send_friend_request")
    payload = {"test": "test"}
    return HttpResponse(json.dumps(payload), content_type='application/json')

错误消息是:

Not Found: /account/profile/sm10547/ajax/friend-request/send/2/
app_1    | HTTP POST /account/profile/sm10547/ajax/friend-request/send/2/ 404 [0.01, 172.18.0.1:38852]

1 个答案:

答案 0 :(得分:0)

  1. 如果您使用的是诸如 path 之类的常规URL调度程序,请使用 path 转换器以捕获诸如public IActionResult AddNewProduct([FromBody] Product newProduct) { ... } 之类的URL参数,例如: <int:pk>docs for path()
  2. 如果您使用的是诸如 re_path 之类的正则表达式URL调度程序,请使用常规 表达式以捕获URL参数,例如path("ajax/friend-request/send/<int:pk>/", views.send_friend_request, name="user_send_request"):使用(?P<pk>[0-9])docs for re_path()

在您的情况下,使用re_path(r"ajax/friend-request/send/(?P<pk>[0-9])/$", views.send_friend_request, name="user_send_request")可以正常工作。