更新Django对象字段而不刷新页面

时间:2017-11-30 11:41:59

标签: python django

如何在不刷新页面的情况下调用更改对象字段的视图功能?

views.py

def add_like(request, pk):
    book = Book.objects.get(pk=pk)
    book.like = True
    book.save()
    return redirect('book_list')

urls.py

url(r'^add_like/(?P<pk>[0-9]+)/$', views.add_like, name='add_like'),

list.html

[...]
<td><a href="{% url 'add_like' pk=book.pk %}" class="btn btn-default"><span class="glyphicon glyphicon-heart" style="color: grey;"></span></a></td>
[...]

用户点击按钮后,我想将状态和标记内容更改为:

<td><a href="{% url 'remove_like' pk=book.pk %}" class="btn btn-default"><span class="glyphicon glyphicon-heart" style="color: red;"></span></a></td>

我知道Ajax可以作为答案,但我不知道如何实现它。

感谢。

1 个答案:

答案 0 :(得分:1)

而不是

<td><a href="{% url 'remove_like' pk=book.pk %}" class="btn btn-default"><span class="glyphicon glyphicon-heart" style="color: red;"></span></a></td>

使用输入并为其提供类似

的ID

<td><input style="color: red" class="book btn btn-default glyphicon glyphicon-heart" value="{book.pk}" /></td>

然后根据with this example调用AJAX函数

  <script>
    $(".book").on('click', function () {
      var id = $(this).val();

      $.ajax({
        url: '/add_like/',
        data: {
          'pk': id
        },
        dataType: 'json',
        success: function (data) {
          if (data) {
            alert(data);
          }
        }
      });

    });
  </script>

然后使用以下命令更新您的视图:

from django.http import JsonResponse
def add_like(request):
    pk = request.GET.get('pk', None)
    book = Book.objects.get(pk=pk)
    book.like = True
    book.save()
    data = {'book', book}
    return JsonResponse('data')