Django:在不刷新页面的情况下更新页面信息

7
我一直在尝试让我的网站在按下按钮时更新以下部分: Coins 在我的模板中,我通过{{ request.user.profile.coins }}访问此信息:
<span class="status">Balance:&nbsp;{{ request.user.profile.coins }}
  <img class="coin-img" src="{% static 'assets/coin.png' %}" height="40px" width="auto">
</span>

我在研究这个过程,尝试使用一个AJAX函数调用这个视图:

@login_required(login_url='users/login')

def coin_increase(request):
    """
    Function based view for increasing a user's coin balance
    """
    if request.is_ajax():
        try:
            user = request.user
        except User.DoesNotExist:
            raise Http404("No user matches the given query.")
        user.profile.coins += 5
        user.save()
        return render(request, 'home.html', {'home': home})
    else:
        raise Http404

AJAX函数如下:
function update_coins() {
    $.ajax({
      method: "POST",
      url: "/coins",
      data: {},
      success: function(data) {
        alert("test");
      }
    })
  };

我该如何让它工作?


如果您在更新DOM内容时遇到问题,请同时放置您的模板HTML代码。 - Ilario Pierbattista
1个回答

5
我猜测home.html是整个页面的模板,其中包含了我们感兴趣的部分。
问题就在这里:
return render(request, 'home.html', {'home': home})

您无需渲染整个页面即可更新部分内容,只需知道user.profile.coins的新值即可。最常用的技术是将该数据序列化为javascript可以理解的格式:JSON。

不确定您使用的django版本,也许这可以解决:

from django.http import JsonResponse
return JsonResponse({'coins':user.profile.coins})

然后:

function update_coins() {
    $.ajax({
      method: "POST",
      url: "/coins",
      data: {},
      success: function(data) {
        console.log(data) // check out how data is structured

        // Update the coin amount
        $('.status').contents()[0].textContent = 'Balance&nbsp'+data.coins
      }
    })
  };

我在控制台中得到了 Object { coins: 6725 } - iFengo
�在很好🙂,使用jQuery选择器�选择包�硬�数�的DOM元素,并将其更新为data.coins。 如�您�熟悉jQuery选择器,请�布您的HTML,我会帮助您。 - Ilario Pierbattista
我的HTML代码如下: <span class="status">余额:&nbsp;{{ request.user.profile.coins }}<img class="coin-img" src="{% static 'assets/coin.png' %}" height="40px" width="auto"></span>,那么我应该怎样使用$( ".status" ).something(data.coins)呢? - iFengo
使用 $('.status').contents()[0].textContent = '余额&nbsp'+data.coins。 请参阅 https://dev59.com/i2kw5IYBdhLWcg3wV5MD 以获取更多信息。 - Ilario Pierbattista
对我来说它不起作用:这里我有一些问题:https://stackoverflow.com/questions/58060402/two-submit-inputs-within-one-form-and-ajax-in-django - Nessi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接