Ajax转到url而不是更改数据Django

时间:2018-06-11 12:35:08

标签: django

我在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}

1 个答案:

答案 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 %}