此上下文处理器
def cart_proc(request):
return (dict(cart=Cart(request)))在模板中给出变量{{ cart.count }},以便在base.html中使用{{cart}}。计数是指在手推车中计数产品数量的方法。
这是我的js
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-购物车作为我的手推车)
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}},而不需要重新加载页面。现在,它只在重新加载之后更新。
发布于 2017-01-28 15:26:08
我认为您对django应用程序与客户端的通信方式有一点误解。您必须了解请求响应生命周期。
模板上下文只存在于请求响应生命周期中。来自客户端的每个请求都将使用新的模板上下文启动一个新工作人员来生成响应。在客户端应用程序和django之间没有持久的有状态连接()。
这意味着,如果您想更新客户端页面而不重新加载它(再次请求它),您必须将新的卡片计数与您的JsonResponse传递给客户端,并让处理响应的javascript代码更新显示的值。
发布于 2017-01-28 13:27:18
你做不到。呈现页面后,所有模板变量都会消失。可以使用input hidden存储cart.count值,然后更新该值。
https://stackoverflow.com/questions/41910247
复制相似问题