Noreversematch в / cart / remove / 5 /

Это мой код. Когда я не пишу path('remove/<int:product_id>/', views.cart_detail, name='cart_remove'), в urls.py, он работает нормально, но когда я пишу приведенный выше код, я получаю следующую ошибку:

Reverse for 'cart_add' with arguments '('',)' not found. 1 pattern(s) tried: ['cart\/(?P[0-9]+)\/$']

Файлы:

urls.py

from django.urls import path
from . import views

app_name = 'cart'
urlpatterns = [
    path('<int:id>/', views.cart_add, name='cart_add'),
    path('remove/<int:product_id>/', views.cart_detail, name='cart_remove'),
    path('detail/', views.cart_detail, name='cart_detail'),

]

views.py

def cart_add(request, id):
    if request.method == 'POST':
        cart_form = CartAddProductForm(request.POST)
        if cart_form.is_valid():
            if not cart_form.cleaned_data['update']:
                product_id = str(id)
                session = request.session
                cart = session.get(settings.CART_SESSION_ID)
                if not cart:
                    cart = request.session[settings.CART_SESSION_ID]={}
                if product_id in cart:
                    cart[product_id]['quantity'] = cart_form.cleaned_data['quantity']
                else:
                    cart[product_id] = {'quantity': cart_form.cleaned_data['quantity']}
                session[settings.CART_SESSION_ID] = cart
                session.modified = True
            else:
                pass
    return redirect('shop:product_list')

def cart_detail(request, product_id=None):
    cart_item = request.session.get(settings.CART_SESSION_ID)
    total_price = 0
    if not product_id:
        add = [k for k in cart_item.keys()]
        for key in add:
            product_id = int(key)
            product = get_object_or_404(Product, id=product_id)
            total_price_per_item = cart_item[key]['quantity'] * product.price
            cart_item[key]['product'] = product
            cart_item[key]['total_price_per_item'] = total_price_per_item
            cart_item[key]['update_quantity_form'] = CartAddProductForm(
                initial={'quantity': cart_item[key]['quantity'],
                         'update': True})
            total_price += total_price_per_item
    else:
        if product_id in cart_item:
            del cart_item[product_id]
    return render(request, 'cart/detail.html', {'cart': cart_item, 'total_price': total_price})

detail.html

<td>
                    <form action="{% url 'cart:cart_add' product.id %}" method="post">
                        {{ item.update_quantity_form.quantity }}
                        {{ item.update_quantity_form.update }}
                        <input type="submit" value="Update">
                        {% csrf_token %}
                    </form>
                </td>
                <td><a href="{% url 'cart:cart_remove' product.id %}">Remove</a></td>
                <td class="num">${{ product.price }}</td>
                <td class="num">${{ item.total_price_per_item }}</td>

Не могли бы вы показать мне соответствующую часть проекта urls.py?

HP Bruna 13.09.2018 21:33

urlpatterns = [путь ('admin /', admin.site.urls), путь ('cart /', include ('cart.urls', namespace = 'cart')), путь ('', include ('shop. urls ', namespace =' shop ')),]

Dilshad 13.09.2018 21:36

from django.contrib импортировать admin из пути импорта django.urls, включить из настроек импорта django.conf из django.conf.urls.static import static urlpatterns = [path ('admin /', admin.site.urls), path (' cart / ', include (' cart.urls ', namespace =' cart ')), путь (' ', include (' shop.urls ', namespace =' shop ')),]

Dilshad 13.09.2018 21:50

Думаю, мне это не нужно.

Dilshad 13.09.2018 21:51

Думаю, я понял: в вашей форме product.id пуст. Другими словами, <int: id> не указан, поэтому шаблон не совпадает.

HP Bruna 13.09.2018 21:56

В detail.html я использовал product.name и product.price, которые отлично работают, так почему бы не product.id?

Dilshad 13.09.2018 22:10

product.name и product.price могут быть пустыми. Но product.id в качестве аргумента для URL-адреса нет. Для отладки: удалите часть URL и просто визуализируйте product.id, например PRODUCTID: {{ product.id }}, просто чтобы посмотреть, есть ли он там.

HP Bruna 13.09.2018 22:26

да, это есть. Я это проверяю.

Dilshad 13.09.2018 22:32

это целое число?

HP Bruna 13.09.2018 22:33

он работает нормально, когда я удаляю URL-адрес корзины: cart_remove, тогда эта ошибка была удалена

Dilshad 13.09.2018 22:45

да, это целое число

Dilshad 14.09.2018 08:36

Код мне нравится. Я полагаю, что вы удалили некоторые части, чтобы предоставить нам минимальный рабочий пример. Но настоящая ошибка где-то в вырезанной части.

HP Bruna 14.09.2018 08:43
0
12
114
0

Другие вопросы по теме