Django - NoReverseMatch в /carro/

Я учусь создавать базовый сайт электронной коммерции, но у меня возникла проблема, которая появляется, когда я добавляю товар в корзину. Я перепробовал все (я думаю), но все равно не могу заставить корзину работать. Кажется, что аргумент для "id_producto" не доходит до никуда.

URLS.PY

from django.conf import settings
from django.urls import path
from .import views

app_name = "carro"

urlpatterns = [
    path('', views.detalle_carro, name='detalle_carro'),
    path('add/<str:id_producto>/', views.carro_mas, name='carro_mas'),
    path('remove/<str:id_producto>/', views.carro_menos, name='remover_carro'),
]

VIEWS.PY

from django.shortcuts import render, redirect, get_object_or_404
from django.contrib import messages
from django.views.decorators.http import require_POST
from gestionPedidos.models import Producto
from .carro import Carro
from .forms import anadirProductoForm
#aqui va el form cupon

@require_POST
def carro_mas(request, id_producto):
    carro = Carro(request)
    producto = get_object_or_404(Producto, id_producto=id_producto)
    form = anadirProductoForm(request.POST)
    
    if form.is_valid():
        cd = form.cleaned_data
        carro.anadir(producto = producto, cantidad=cd['cantidad'], update_cantidad=cd['update'])
    messages.success(request, "vamooo")
    return redirect('carro:detalle_carro')

def carro_menos(request, id_producto):
    carro = Carro(request)
    producto = get_object_or_404(Producto, id=id_producto)
    carro.remover(producto)
    return redirect('carro:detalle_carro')

def detalle_carro(request):
    carro = Carro(request)
    for item in carro:
        item['update_cantidad_form'] = anadirProductoForm(initial = {
            'cantidad' : item['cantidad'],
            'update' : True
        })
    return render(request, 'detalle_carro.html', {'carro' : carro})

мой шаблон

{% extends 'base.html' %}
{% load static %}

{% block title %}Mi carrito de compras!{% endblock %}

{% block first_content %}
    <div class = "row">
        <div class = "col-md-12">
            <h1>Mi carrito de compras</h1>
            
            <table class="table">
                <thead>
                    <th>Imagen</th>
                    <th>Nombre</th>
                    <th>Cantidad</th>
                    <th>Remover</th>
                    <th>Precio unitario</th>
                    <th>Precio total</th>
                </thead>
                <tbody>
                    {% for item in carro %}
                        {% with p=item.Producto %}
                            <tr>
                                <td>
                                    {% if p.imagen %}
                                    <img class="img-afiche"  src="{{p.imagen.url}}" class="card-img-top p-2" alt="{{p.nombre}}">
                                    {% else %}
                                    <img src="{% static 'img/image_not_found.jpg' %}" class="card-img-top" alt="not found">
                                    {% endif %}                        
                                </td>
                                <td>
                                    <h2>{{p.nombre}}</h2>
                                </td>
                                <td>
                                    <form action="{% url 'carro:carro_mas' p.id_producto %}" method="post">
                                        {{ item.update_cantidad_form.cantidad}}
                                        {{ item.update_cantidad_form.update}}
                                        <input class='btn btn-default' type="submit" value="Actualizar">
                                        {% csrf_token %}
                                    </form>
                                </td>
                                <td><a href="{% url 'carro:carro_menos' p.id_producto %}">Remover</a></td>
                                <td> {{item.precio}} </td>
                                <td> {{item.precio_total}} </td>
                            </tr>
                        {% endwith %}
                    {% endfor %}  
                </tbody>
            </table>
        </div>
        
        <div class="row">
            <div class="col-md-4" style="text-align : right">
                <a class="btn btn-default" href="{% url 'home' %}">Seguir comprando</a>
            </div>
        </div>
    </div>
{% endblock %}        

TRACEBACK

Я ожидаю, что файл detalle_carro.html будет отображаться с добавленным товаром.

Похоже, что значение для p.id_producto в строке <form action="{% url 'carro:carro_mas' p.id_producto %}" method="post"> пустое.

Возможно, вы захотите распечатать это значение и проверить. Также посмотрите этот ответ

Вернуться на верх