【问题标题】:Update Django object field without refresh the page更新 Django 对象字段而不刷新页面
【发布时间】:2017-11-30 11:41:59
【问题描述】:

如何调用视图函数来更改对象字段而不刷新页面?

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 可以是答案,但我不知道如何实现它。

谢谢。

【问题讨论】:

  • 类似 Ajax 的方法是唯一的方法imho
  • 好的,你能给我举个例子吗?我说我不知道​​该怎么做:S

标签: python django


【解决方案1】:

代替

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

使用输入并给它一个 ID,如

&lt;td&gt;&lt;input style="color: red" class="book btn btn-default glyphicon glyphicon-heart" value="{book.pk}" /&gt;&lt;/td&gt;

然后根据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')

【讨论】:

  • 感谢您的回答,但是用这段代码,我看不到心形字形;相反,我在输入中看到了书的 ID 号。另一件事是,如果我不刷新页面,图标不会改变颜色。
猜你喜欢
  • 2013-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 2021-07-24
  • 2011-12-22
  • 1970-01-01
相关资源
最近更新 更多