AJAX-запрос возвращает HTML-файл вместо данных. ( Django & Python )

У меня есть страница профиля с постами пользователя. Люди могут нравиться/не нравиться посты. Это работает хорошо, но перезагружает страницу, поэтому я внедряю AJAX.

Маршрут проходит следующим образом.

Внутри представления профиля находится запрос "like POST", заканчивающийся символом

data = { 'likes':post.likes.all().count() }

return JsonResponse(data,safe=False)"

При нажатии на кнопку "Мне нравится" я могу увидеть данные на пустой странице, если захочу. Таким образом, я знаю, что он получает их.

К сожалению, при использовании AJAX вместо возврата данных возвращается представление профиля

return render(request, "profile.html", context)

Вот мой код AJAX

    const post_id = $(this).attr('id')

    const likeText = $( `.like_button${post_id} `).attr('name')
    const trim = $.trim(likeText)

    const url = $(this).attr('action')

    let res;
    const likes = $(`.like_count${post_id}`).text() || 0
    const trimCount = parseInt(likes)

    $.ajax({
        type: 'POST',
        url: url,
        data: {
            'csrfmiddlewaretoken':$('input[name=csrfmiddlewaretoken]').val(),
            'post_id':post_id,
        },
        success: function(data){
            console.log('success', data)
        },
        error: function(data){
            console.log('error', data)
        }

    })

Любая помощь будет очень признательна. Впервые использую AJAX, поэтому буду признателен за подробную информацию.

Не удивительно, что он возвращает HTML, поскольку это именно то, что вы возвращаете в представлении: отрендеренный HTML. Если вам нужен JSON, то вам нужен объект JSONResponse.

https://docs.djangoproject.com/en/4.1/ref/request-response/#jsonresponse-objects

Так, вместо:

return render(request, "profile.html", context)

который возьмет profile.html, введет значения из context и отправит вам это в виде html, вы должны сделать что-то вроде:

response = JsonResponse({"mydata": "goes here", "some_more": data})

Затем вы можете разобрать это как JSON в вашем коде AJAX. Если в словаре context содержатся все необходимые данные и это то, что вам нужно, вы можете просто заменить одну строку:

response = JsonResponse(context)
Вернуться на верх