我在Django中使用ajax来激活添加到收藏夹按钮,这是我的文件
网址
path('<int:pk>/favorite_item/', views.favorite_item, name='favorite_item'),
views.py @login_required
def favorite_item (request, pk):
favitem = get_object_or_404(Item, pk=pk)
data = {
'is_fav': Favorite.objects.filter(user=request.user, item=favitem).exists(),
}
if data ['is_fav']:
Favorite.objects.get(user=request.user, item=favitem).delete()
else:
new_entry = Favorite.objects.create(item=favitem, user=request.user)
return JsonResponse(data)
最后 HTML 只是脚本的一部分
{% block javascript %}
<script>
$("#add_to_fav").click(function () {
console.log( $(this).val() );
});
$.ajax({
url: form.attr("data-favorite_item-url"),
data: form.serialize(),
dataType: 'json',
success: function (data) {
$('.results').html(data);
},
});
</script>
{% endblock %}
现在,当我单击应该触发整个动作的元素时,该函数已经正常工作,该项目被删除或添加到db,但是它带我到另一个只有一个句子的页面({"is_fav": true}
)或({"is_fav": false}
)
答案 0 :(得分:1)
您需要使用preventDefault
来阻止您的浏览器在点击链接时实际转到链接页面。您需要更改包含的代码的第3行和第4行,如下所示:
{% block javascript %}
<script>
$("#add_to_fav").click(function (event) {
event.preventDefault();
console.log( $(this).val() );
});
$.ajax({
url: form.attr("data-favorite_item-url"),
data: form.serialize(),
dataType: 'json',
success: function (data) {
$('.results').html(data);
},
});
</script>
{% endblock %}