0

ウィッシュ リストにコードを使用しています。サイトに表示するには、ウィッシュリストにある製品の数が必要です。さまざまな方法を試しましたが、セッションではこれしかできないと思います。何か助けてください。

どうすればそうできますか。

@never_cache
def wishlist(request, template="shop/wishlist.html"):
    """
    Display the wishlist and handle removing items from the wishlist and
    adding them to the cart.
    """

    skus = request.wishlist
    error = None
    if request.method == "POST":
        to_cart = request.POST.get("add_cart")
        add_product_form = AddProductForm(request.POST or None,
                                          to_cart=to_cart,request=request)
        if to_cart:
            if add_product_form.is_valid():
                request.cart.add_item(add_product_form.variation, 1,request)
                recalculate_discount(request)
                message = _("Item added to cart")
                url = "shop_cart"
            else:
                error = add_product_form.errors.values()[0]
        else:
            message = _("Item removed from wishlist")
            url = "shop_wishlist"
        sku = request.POST.get("sku")
        if sku in skus:
            skus.remove(sku)
        if not error:
            info(request, message)
            response = redirect(url)
            set_cookie(response, "wishlist", ",".join(skus))
            return response

    # Remove skus from the cookie that no longer exist.
    published_products = Product.objects.published(for_user=request.user)
    f = {"product__in": published_products, "sku__in": skus}
    wishlist = ProductVariation.objects.filter(**f).select_related(depth=1)
    wishlist = sorted(wishlist, key=lambda v: skus.index(v.sku))
    context = {"wishlist_items": wishlist, "error": error}
    response = render(request, template, context)
    if len(wishlist) < len(skus):
        skus = [variation.sku for variation in wishlist]
        set_cookie(response, "wishlist", ",".join(skus))
    return response
4

1 に答える 1

2

セッション != Cookie。セッションはバックエンドのサーバーによって管理され、Cookie はユーザーのブラウザーに送信されます。Django は単一の Cookie を使用してセッションを追跡しますが、このインスタンスでは単に Cookie を使用しています。

セッション フレームワークを使用すると、サイト訪問者ごとに任意のデータを保存および取得できます。サーバー側にデータを保存し、Cookie の送受信を抽象化します。Cookie には、データ自体ではなくセッション ID が含まれます (Cookie ベースのバックエンドを使用している場合を除く)。

何が必要かを伝えるのは難しいですが、単に Cookie に保存しているアイテムの数を取得したい場合は、単にskus を数えて、テンプレートに送信されるコンテキストに入れる必要があります。

if len(wishlist) < len(skus):
    skus = [variation.sku for variation in wishlist]
    set_cookie(response, "wishlist", ",".join(skus))
context = {"wishlist_items": wishlist, "error": error, "wishlist_length":len(wishlist)}
return render(request, template, context)

そして使用:

{{ wishlist_length }}

あなたのテンプレートで

于 2013-06-21T10:50:48.427 に答える