【问题标题】:How to handle 302 in django 2.2?如何在 django 2.2 中处理 302?
【发布时间】:2020-01-27 13:58:34
【问题描述】:

我的订单摘要页面中有 3 件或更多商品。当我删除其中一项时,我的代码会将我重定向到同一订单摘要页面。但是当我试图从订单摘要页面中删除最后一个订单时,我的代码会将我重定向到主页。

我想在购物车为空时留在同一页面上并继续 购物按钮,但是当我从购物车中取出最后一件商品时 将我重定向回主页

views.py

def remove_from_cart(request, slug):
    course = get_object_or_404(Course, slug=slug)
    cart_qs = Cart.objects.filter(item=course, user=request.user)
    if cart_qs.exists():
        # cart = cart_qs[0]
        # if cart.quantity > 1:
        #     cart.quantity -= 1
        #     cart.save()
        # else:
        cart_qs.delete()
        order_qs = Order.objects.filter(
            user=request.user,
            ordered=False
        )
        if order_qs.exists():
            order = order_qs[0]
            # check if the order item is in the order
            if order.orderitems.filter(item__slug=course.slug).exists():
                order_item = Cart.objects.filter(
                    course=course,
                    user=request.user,
                )[0]
                order.orderitems.remove(order_item)
                messages.info(request, "This item was removed from your cart.")
                return redirect("cart:order-summary")
            else:
                messages.info(request, "This item was not in your cart")
                return redirect("cart:order-summary")
    else:
        messages.info(request, "You do not have an active order")
        return redirect("cart:order-summary")

order-summary.html

<tbody>
                        {% if carts %}
                        {% for cart in carts %}
                            <tr>
                                <td>
                                    <p>{{ cart.item }}</p>
                                </td>
                                <td>
                                    <p>Rs. {{ cart.price }}</p>
                                </td>
                                <td>
                                    <p>Rs. {{cart.get_total }}</p>
                                    <a href="{% url 'cart:remove-from-cart' cart.item.slug %}">Remove</a>
                                </td>
                            </tr>
                        {% endfor %}
                        {% else %}
                            <tr>
                                <td>
                                    <p>Your Cart is Empty </p>
                                </td>
                            </tr>
                        </tbody>
                        {% endif %}

urls.py

   app_name= 'cart'

    urlpatterns = [
        # path('', Home.as_view(), name='home'),
        path('<slug>', add_to_cart, name='cart'),
        path('remove/<slug>', remove_from_cart, name='remove-from-cart'),
        path('order-summary/', CartView, name='order-summary'),
    ]

【问题讨论】:

  • 显示你的 urls.py
  • @Charnel 我添加了 urls.py
  • 如果你用这个 redirect("order-summary") 替换重定向,它会起作用吗?
  • @Charnel 它向我显示 NoReverseMatch 错误。我这样做了
  • 嗯,你能把CartView的代码给我吗?

标签: django python-3.x redirect httprequest


【解决方案1】:

我使用了redirect() 而不是render()。

def CartView(request):
    user = request.user
    # course = get_object_or_404(Course, slug=slug)
    carts = Cart.objects.filter(user=user)
    orders = Order.objects.filter(user=user, ordered=False)

    if carts.exists():
        order = orders[0]
        return render(request, 'order-summary.html', {"carts": carts, 'order': order})

    else:
        messages.warning(request, "You do not have an active order")
        # return redirect("cart:order-summary")
        return render(request, 'order-summary.html')

【讨论】:

    猜你喜欢
    • 2020-04-27
    • 2016-09-20
    • 2021-09-13
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    相关资源
    最近更新 更多