为什么它没有正确显示?

我目前正在开发一个在线商店,人们可以将产品添加到购物车。在我的 home html 文件中,如果产品未添加到购物车,我想显示“添加到购物车”按钮;如果添加产品,则显示“从购物车删除”按钮。但它无法正常工作。我现在收到“从购物车中删除”按钮。我的index.html:


{% extends 'base.html' %} 


{% block content %}

    <h1>Products</h1>

    <div class="container-md">

        <div class="row">

            {% for product in products %}

                <div class="col">

                    <div class="card-deck" style="width: 18rem;">

                      <img src="{{ product.image_url }}" class="card-img-top" alt="...">

                      <div class="card-body">

                        <a class="card-title" href="{% url 'detail-view' product.slug %}">{{ product.name }}</a>

                        <p class="card-text">${{ product.price }}</p>

                        {% if product in Cart.products.all %}

                            <a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Add to Cart</a>

                        {% else %}

                            <a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Remove from Cart</a> 

                        {% endif %}


                      </div>

                    </div>

                </div>

            {% endfor %}

        </div>

    </div>

{% endblock %}

我的购物车的views.py:


from django.shortcuts import render, redirect, HttpResponseRedirect

from products.models import Product

from .models import Cart

from django.contrib import messages

from django.urls import reverse



def cart(request):

    cart = Cart.objects.all()[0]

    context = {"cart":cart}

    template = 'shopping_cart/cart.html'

    return render(request, template, context)

POPMUISE
浏览 70回答 1
1回答

呼啦一阵风

代替 :{% if product in Cart.products.all %}      <a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Add to Cart</a>{% else %}     <a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Remove from Cart</a> {% endif %}你可以这样尝试:{% if not product.cart_set.exists %}     <a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Add to Cart</a>{% else %}     <a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Remove from Cart</a> {% endif %}我用来reverse relation检查该产品是否存在任何购物车。但它会检查该产品是否在任何购物车中。这不应该是正确的,因为它应该检查产品是否在特定的购物车中。现在,如果您想更具体地了解该产品是否存在于某个购物车中,我建议在视图中进行此计算。例如,在您的产品视图中,您可以这样做:from django.db.models import Case, When, Value, BooleanFieldcart = Cart.objects.first()products = Product.objects.annotate(in_cart=Case(When(cart__pk=cart.id,then=Value(True)),default=Value(False),output_field=BooleanField()))return render(request, template.html, context={'products':products})并签入模板:{% if not product.in_cart %}          <a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Add to Cart</a>{% else %}         <a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Remove from Cart</a> {% endif %}我在这里使用 djangoconditional expression检查产品是否在某个购物车中。也许您的代码中出现了更简单的错误:在你的逻辑中添加一个notif else:{% if not product in Cart.products.all %}      <a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Add to Cart</a>{% else %}     <a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Remove from Cart</a> {% endif %}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Html5