使用不在Django中工作的模板中的表单从购物车中删除

2024-05-14 08:26:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Django构建一个电子商务应用程序,我正在Django会话中存储我的购物车对象,添加到购物车,减少数量;“增加数量”在产品页面上似乎效果很好,但在购物车页面上却没有同样的逻辑。Django没有抛出任何错误。下面是我表单的代码片段,位于购物车页面的一个表中&;处理post请求的view函数: 表格:

<div class="container">
    <div class="border rounded p-4 m-4">
         <p class="display-4 pl-4 ml-4">Your Cart</p>
         <hr>
         <table class="table">
             <thead>
                 <tr>
                     <th>Sno.</th>
                     <th>Image</th>
                     <th>Product</th>
                     <th>Price</th>
                     <th>Quantity</th>
                     <th>Total</th>
                     <th>     </th>
                 </tr>
             </thead>
             <tbody>
                 
                 {% for product in products %}
                 <tr>
                     <td>{{forloop.counter}}</td>
                     <td>___</td>
                     <td>{{product.name}}</td>
                     <td>{{product.price}}</td>
                     <td>{{product|cart_quantity:request.session.cart}}</td>
                     <td>{{product|price_total:request.session.cart}}</td>
                     <td>
                       <form action="/cart/#{{product.id}}" method="POST">
                       {% csrf_token %}
                       <input hidden type="text" name="product" value="{{product.id}}">
                       <input hidden type="text" name="remove" value="True">
                       <input type="submit" value=" * " class="btn btn-block btn-light border-right">
                       </form>
                     </td>
                 </tr>
 
                 {% endfor %}
                
             </tbody>
 
             <tfoot>
                 <tr>
                     <th colspan="4"></th>
                     <th class="" colspan="">Total</th>
                     <th>{{products|total_cart_price:request.session.cart}}</th>
                 </tr>
             </tfoot>
         </table>

查看功能:

class Cart(View):
    def get(self, request):
        ids = list(request.session.get('cart').keys())
        products = Product.get_products_by_id(ids)
        return render(request , 'cart.html' , {'products' : products} )        

    def post(self, request):
        product = request.POST.get('product')
        remove = request.POST.get('remove')
        cart = request.session.get('cart')
        if remove:
            cart.pop(product)
        else:
            pass      

        return redirect('cart')    

Tags: djangogetrequestsessiontable页面producttr
1条回答
网友
1楼 · 发布于 2024-05-14 08:26:54

显然,django sessions对象需要在会话中对对象进行任何更改时被感知。解决方案是添加:

request.session.modified = True

我正在测试这个rn,它似乎工作得很好,但我不明白为什么在主页上它不添加修改过的命令就可以工作。如果有人对这个问题有进一步的了解。分享

相关问题 更多 >

    热门问题