Django: ajax не возвращает и не отправляет данные в django
Я создаю простую кнопку like с помощью ajax, я следовал руководству, но кажется, что я что-то упускаю, я не получаю никаких ошибок ни в консоли, ни в терминале django, но когда я нажимаю на кнопку, никакие данные не отправляются, все остается по-прежнему, и это не то, чего я ожидал, я знаю, что где-то что-то упускаю, и я не могу сказать, откуда берется эта ошибка.
views.py
@login_required
def like(request):
if request.POST.get("action") == 'post':
result = ""
id = int(request.POST.get('courseid'))
course = get_object_or_404(Course, id=id)
if course.like.filter(id=request.user.id).exists():
course.like.remove(request.user)
course.like_count -= 1
result = course.like_count
course.save()
else:
course.like.add(request.user)
course.like_count += 1
result = course.like_count
course.save()
return JsonResponse({'result': result})
urls.py ПРИМЕЧАНИЕ:Я не знаю, нужен ли мне slug в этом пути url
path('like/', views.like, name="like"),
base.html
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
course-detail.html
<li><button id="like-button" value="{{course.id}}">like</button><span id="like-count">{{course.llke_count}}</span></li>
<script type="text/javascript">
$(document).on("click", '#like-button', function(e){
e.preventDefault()
$.ajax({
type: 'POST',
url: '{% url 'course:like' course.slug %}',
data: {
courseid: $('#like-button').val(),
csrfmiddlewaretoken: $("input[name=csrfmiddlewaretoken]").val(),
action: 'post'
},
success: function(json){
document.getElementById("like-count").innerHTML = json['result']
console.log(json)
},
error: function (xhr, errmsg, err)
console.log(xhr)
console.log(errmsg)
console.log(err)
})
})
</script>
это весь код, который я написал для функциональности, если есть что-то еще, что нужно предоставить, я обновлю вопрос
Обновите ваш код следующим образом, и я сомневаюсь в вашей таблице типа таблицы, предоставьте это в вашем вопросе.
внутри вашего views.py
@login_required
def like(request):
if request.method == 'POST':
result = ""
course_id = int(request.POST.get('courseid'))
course = get_object_or_404(Course, id=course_id)
if course.like.filter(id=request.user.id).exists():
course.like.remove(request.user)
course.like_count -= 1
result = course.like_count
course.save()
else:
course.like.add(request.user)
course.like_count += 1
result = course.like_count
course.save()
return JsonResponse({'result': result})
внутри вашего course-detail.html
<script type="text/javascript">
$("#like-button").on("click", function (e) {
e.preventDefault()
$.ajax({
type: 'POST',
url: "{% url 'course:like' %}",
data: {
courseid: $('#like-button').val(),
csrfmiddlewaretoken: "{{ csrf_token }}",
},
success: function (json) {
document.getElementById("like-count").innerHTML = json['result']
console.log(json)
},
error: function (xhr, errmsg, err) {
console.log(xhr)
console.log(errmsg)
console.log(err)
}
})
})
</script>
Примечание :
- Вам не нужно проверять действие, вместо этого вы можете проверить метод, например
request.method. - Вы предоставили неправильный url внутри вашего ajax вызова
'{% url 'course:like' course.slug %}'он должен быть'{% url 'course:like' %}'без передачи slug. - Не используйте id в качестве переменной, потому что это будет конфликтовать с функцией python
id(), вы можете проверить все доступные встроенные функции в python здесь.