首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不重新加载页面(AJAX)的情况下更新django模板变量?

如何在不重新加载页面(AJAX)的情况下更新django模板变量?
EN

Stack Overflow用户
提问于 2017-01-28 13:19:17
回答 2查看 4.1K关注 0票数 3

此上下文处理器

代码语言:javascript
复制
def cart_proc(request):
    return (dict(cart=Cart(request)))

在模板中给出变量{{ cart.count }},以便在base.html中使用{{cart}}。计数是指在手推车中计数产品数量的方法。

这是我的js

代码语言:javascript
复制
function addProduct(){
$('form.add-product').on('submit', function(){
    var link = $(this)
    var quantity = $(this).find('#id_quantity').val()
    $.ajax({
        'url': link.attr('action'),
        'type': 'POST',
        'dataType': 'json',
        'data': {
            'quantity': quantity,
            'csrfmiddlewaretoken': $('input[name="csrfmiddlewaretoken"]').val()
        },
        'success': function(data, status, xhr){
            alert('Success');
            return false;
        },
        'error': function(xhr, status, error){
            alert('Error on server. Please try again later.');
            return false;
        }
    });
    return false;
});
}

和我的观点(我使用django-购物车作为我的手推车)

代码语言:javascript
复制
def add_to_cart(request, id):
    form = QuantityForm(request.POST)
    if form.is_valid():
        product = Product.objects.get(id=id)
        quantity = request.POST['quantity']
        cart = Cart(request)
        cart.add(product, product.price, quantity)
       return JsonResponse({'status': 'success'})

当我使用AJAX在购物车中添加产品时,我想要更新{{cart.count}},而不需要重新加载页面。现在,它只在重新加载之后更新。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-28 15:26:08

我认为您对django应用程序与客户端的通信方式有一点误解。您必须了解请求响应生命周期。

模板上下文只存在于请求响应生命周期中。来自客户端的每个请求都将使用新的模板上下文启动一个新工作人员来生成响应。在客户端应用程序和django之间没有持久的有状态连接()。

这意味着,如果您想更新客户端页面而不重新加载它(再次请求它),您必须将新的卡片计数与您的JsonResponse传递给客户端,并让处理响应的javascript代码更新显示的值。

票数 3
EN

Stack Overflow用户

发布于 2017-01-28 13:27:18

你做不到。呈现页面后,所有模板变量都会消失。可以使用input hidden存储cart.count值,然后更新该值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41910247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档