В настоящее время я работаю над сайтом интернет-магазина, и у меня возникла проблема с обновлением корзины

views.py:

from django.contrib.auth.decorators import login_required
from django.shortcuts import render

from .cart import Cart

from product.models import Product

def add_to_cart(request, product_id):
    cart = Cart(request)
    cart.add(product_id)

    return render(request, 'cart/partials/menu_cart.html')

def cart(request):
    return render(request, 'cart/cart.html')

def update_cart(request, product_id, action):
    cart = Cart(request)

    if action == 'increment':
         cart.add(product_id, 1, True)
    else:
         cart.add(product_id, -1, True)

    product = Product.objects.get(pk=product_id)
    quantity = cart.get_item(product_id)

    if quantity:
         quantity = quantity['quantity']

         item = {
             'product': {
                 'id': product.id,
                 'name': product.name,
                 'image': product.image,
                 'get_thumbnail': product.get_thumbnail(),
                 'price': product.price,
             },
             'total_price': (quantity * product.price) / 100,
             'quantity': quantity,
         }
     else:
         item = None

     response = render(request, 'cart/partials/cart_item.html', {'item': item})
     response['HX-Trigger'] = 'update-menu-cart'

     return response

 @login_required
 def checkout(request):
     return render(request, 'cart/checkout.html')

 def hx_menu_cart(request):
     return render(request, 'cart/partials/menu_cart.html')

 def hx_cart_total(request):
     return render(request, 'cart/partials/cart_total.html')

cart.html:

{% extends 'main/base.html' %}

{% block title %}Shopping cart | {% endblock %}

{% block content %}
<div class="max-w-6xl mx-auto flex flex-wrap item-start py-6 px-6 xl:px-0">
  <div class="products w-full lg:w-3/4">
    {% for item in cart %}
      {% include 'cart/partials/cart_item.html' %}
    {% endfor %}
  </div>
  <div class="summary w-full md:w-1/4 p-6 bg-gray-100 rounded-xl mt-3">
    <h2 class="uppercase text-lg mb-5">Summary</h2>
    <div class="mb-6 flex justify-between">
      <span class="font-semibold">Total</span>
      <span
        hx-get="{% url 'hx_cart_total' %}"
        hx-trigger="update-menu-cart from:body"
        hx-swap="innerHTML">
        {% include 'cart/partials/cart_total.html' %}
      </span>
    </div>
    <a href="{% url 'checkout' %}" class="inline block px-8 py-4 rounded-xl bg-cyan-400 hover:bg-cyan-500 text-white">Checkout</a>
  </div>
</div>
{% endblock %}

partials/cart_item.html:

{% if item %}
    <div class="product mb-6 flex pr-6" id="cart-item-{{ item.product.id }}">
        <a href="{% url 'product' item.product.slug %}" class="w-1/4">
            <img class="hover:shadow-lg rounded-xl" src="{{ item.product.get_thumbnail }}">
        </a>

        <div class="w-3/4 pl-6">
            <div class="flex justify-between">
                <a href="{% url 'product' item.product.slug %}" class="text-lg">{{ item.product.name }}</a>

                <span class="mb-6 pt-1 text-gray-400">${{ item.total_price }}</span>
            </div>

            <hr>

            <div class="quantity mt-6 flex items-center space-x-4">
                <a
                    class="p-3 bg-gray-100"
                    hx-get="{% url 'update_cart' item.product.id 'decrement' %}"
                    hx-target="#cart-item-{{ item.product.id }}"
                    hx-swap="outerHTML"
                >
                    -
                </a>
                <span>{{ item.quantity }}</span>
                <a
                    class="p-3 bg-gray-100"
                    hx-get="{% url 'update_cart' item.product.id 'increment' %}"
                    hx-target="#cart-item-{{ item.product.id }}"
                    hx-swap="outerHTML"
                >
                    +
                </a>
            </div>
        </div>
    </div>
{% endif %}

error:

Internal Server Error: /cart/update_cart/3/increment/
Traceback (most recent call last):
  File "C:\Users\ALECO TAFO\envs\HitechEnv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "C:\Users\ALECO TAFO\envs\HitechEnv\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\ALECO TAFO\Desktop\Hitech website\hitech\cart\views.py", line 45, in update_cart
    response = render(request, 'cart/partials/cart_item.html', {'item': item})
  File "C:\Users\ALECO TAFO\envs\HitechEnv\lib\site-packages\django\shortcuts.py", line 19, in render

    content = loader.render_to_string(template_name, context, request, using=using)
  File "C:\Users\ALECO TAFO\envs\HitechEnv\lib\site-packages\django\template\base.py", line 938, in render
    bit = node.render_annotated(context)
  File "C:\Users\ALECO TAFO\envs\HitechEnv\lib\site-packages\django\template\base.py", line 905, in render_annotated
    return self.render(context)
  File "C:\Users\ALECO TAFO\envs\HitechEnv\lib\site-packages\django\template\defaulttags.py", line 446, in render
    url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
  File "C:\Users\ALECO TAFO\envs\HitechEnv\lib\site-packages\django\urls\base.py", line 86, in reverse
    return resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
  File "C:\Users\ALECO TAFO\envs\HitechEnv\lib\site-packages\django\urls\resolvers.py", line 694, in _reverse_with_prefix
    raise NoReverseMatch(msg)
django.urls.exceptions.NoReverseMatch: Reverse for 'product' with arguments '('',)' not found. 1 pattern(s) tried: ['shop\\/(?P<slug>[-a-zA-Z0-9_]+)\\/$']
[02/Aug/2022 01:01:36] "GET /cart/update_cart/3/increment/ HTTP/1.1" 500 135835

У меня нет проблем с функцией уменьшения, она работает отлично, но я не могу увеличить товар (количество товаров в корзине не изменяется, как и цена). Я также покажу вам файлы urls.py из-за ошибки "1 pattern(s) tried", возможно, это поможет вам.

cart/urls.py:

from django.urls import path

from cart.views import add_to_cart, cart, checkout, hx_menu_cart, update_cart, hx_cart_total

urlpatterns = [
    path('', cart, name = 'cart'),
    path('checkout/', checkout, name = 'checkout'),
    path('add_to_cart/<int:product_id>/', add_to_cart, name = 'add_to_cart'),
    path('update_cart/<int:product_id>/<str:action>/', update_cart, name = 'update_cart'),
    path('hx_menu_cart/', hx_menu_cart, name = 'hx_menu_cart'),
    path('hx_cart_total/', hx_cart_total, name = 'hx_cart_total'),
]

main/urls.py:

from django.contrib.auth import views
from django.urls import path

from main.views import frontpage, shop, signup, account, edit_account
from product.views import product

urlpatterns = [
    path('', frontpage, name = 'frontpage'),
    path('signup/', signup, name = 'signup'),
    path('logout/', views.LogoutView.as_view(), name = 'logout'),
    path('login/', views.LoginView.as_view(template_name='main/login.html'), name = 'login'),
    path('account/', account, name = 'account'),
    path('account/edit', edit_account, name = 'edit_account'),
    path('shop/', shop, name = 'shop'),
    path('shop/<slug:slug>/', product, name = 'product'),
]
Вернуться на верх