Django: Как автоматически обновить страницу после изменения переменной сеанса? - PullRequest
0 голосов
/ 03 ноября 2019

Я отображаю свою навигационную панель, используя только html

. На моей навигационной панели я показываю количество элементов, текущих в моей корзине покупок через request.session.cart_items, где cart_items - моя переменная сеанса

Когда я добавляю товары в свою корзину, мои cart_items меняются, и я вижу, что это действительно изменилось, когда я использую print(request.session.cart_items)

Проблема в том, что мой HTML показывает только обновленный request.session.cart_items, когда яобновите страницу. Как сделать так, чтобы страница обновлялась автоматически после изменения request.session.cart_items?

Вот мой navbar.html

<nav class="main-nav">
    <ul>  
      <li>
        <a href="/">Painting Website</a>
      </li>
      <li>
        <a href="/">{{ request.session.cart_items}}</a>
      </li>
    </ul>
</nav>

Здесь также мой CartUpdateAPIView(APIView) из моего views.py если это поможет

class CartUpdateAPIView(APIView):

    permission_classes  = [permissions.AllowAny]

    def get(self, request, pk=None, *args, **kwargs):

        product_id = request.get('product_id')

        product_obj = Painting.objects.get(pk=product_id)
        cart_obj, new_obj= Cart.objects.new_or_get(request)
        #remove from cart if already in cart
        if product_obj in cart_obj.products.all():
            cart_obj.products.remove(product_obj)
        #add to cart if not in cart already
        else:
            cart_obj.products.add(product_obj) #adding to many-to-many

        return redirect("cart-api:cart-list")

    def post(self, request, pk=None, *args, **kwargs):

        product_id = request.data['products'][0]


        #to make sure that product_id is actually coming through
        if product_id is not None:

            try:
                #getting an instance of the painting from the Painting model
                product_obj = Painting.objects.get(id=product_id)
            except Painting.DoesNotExist:
                print("Sorry this product is out of stock.")

            cart_obj, new_obj = Cart.objects.new_or_get(request)

            #remove from cart if already in cart
            if product_obj in cart_obj.products.all():
                cart_obj.products.remove(product_obj)

            #add to cart if not in cart already
            else:
                cart_obj.products.add(product_obj) #adding to many-to-many

            #getting the total number of items in cart. need this to show the number of items in cart in the nav bar
            request.session['cart_items'] = cart_obj.products.count() 


        return redirect("cart-api:cart-list")

Большое спасибо заранее!

...