这让我发疯了。我正在使用Django-carton中的购物车构建电子商务应用。当我将一个项目添加到购物车时,我可以将项目的ID从上下文中获取到商店中,并将其传递到我的Ajax调用中,并在客户通过单击按钮添加项目时将其传递给视图。
我希望客户能够使用按钮删除和编辑购物车中的数量,现在我正在尝试创建删除和编辑数量功能。我被卡住了,因为我不明白如何在Ajax中传递id的视图。 id不在项上下文对象中。我可以通过打印ids = request.session['CART']
来获取视图中的ID,但它没有当前的ID。上下文中的项目仅限于以下内容:
self.product = product
self.quantity = int(quantity)
self.price = Decimal(str(price))
Django-carton文档中的示例有此示例,该示例不使用Javascript:
的观点:
def remove(request):
cart = Cart(request.session)
product = Product.objects.get(id=request.GET.get('id'))
cart.remove(product)
return HttpResponse("Removed")
网址:
u`rl(r'^remove/$', 'remove', name='shopping-cart-remove'),`
在我看来,我可以使用
获取购物车中所有物品的IDcart = Cart(request.session)
ids = request.session['CART']
给出了以下对象:
{u'meal_pk': 15, u'price': u'5', u'quantity': 39}
但这实际上似乎没有用。这是我第一次遇到会话。我一直在阅读这里的代码https://github.com/lazybird/django-carton/blob/master/carton/cart.py
如何编辑或删除购物车中的商品?
答案 0 :(得分:1)
您仍然可以使用Javascript轻松通过AJAX调用remove
视图;除非另有说明,否则视图不关心是否通过AJAX提交请求。因此,我们可以轻松地设置w / JQuery。
因此,在显示购物车的模板中,例如:
{% load carton_tags %}
{% get_cart as cart %}
<script type="text/javascript" src="path/to/jquery.js">/script>
{% for item in cart.items %}
<a onclick='AjaxRemove("{% url 'shopping-cart-remove' %}?id={{ item.product.id }}")'>Remove this item</a>
{% endfor %}
<script type="text/javascript">
function AjaxRemove(remove_url) {
$.ajax({
url: remove_url,
success: function(response) {alert(response);},
error: function() {alert("Couldn't remove item");}
})
</script>
如果AJAX请求响应成功,将删除该项并发出警报。
您可以使用request.is_ajax()
进一步自定义视图响应以对AJAX请求做出不同的响应:
def remove(request):
cart = Cart(request.session)
product = Product.objects.get(id=request.GET.get('id'))
cart.remove(product)
if request.is_ajax():
# do something, respond differently
return HttpResponse("Removed (via AJAX)")
return HttpResponseRedirect(reverse('shopping-cart-show'))