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">
пустое.
Возможно, вы захотите распечатать это значение и проверить. Также посмотрите этот ответ