Как создать индивидуальную страницу товара с помощью Django?

Я пытаюсь создать отдельную страницу для каждого из моих продуктов. Я нашел решение в Интернете, поэтому я сделал следующее:

models.py:

#IMPORTS
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.urls import reverse
from multiselectfield import MultiSelectField
import uuid

class Product(models.Model):
    product_id=models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    product_title=models.CharField(max_length=100)
    product_price=models.FloatField(default=1.00)
    image_one = models.ImageField(upload_to='media', default='def.jpg')
    image_two = models.ImageField(upload_to='media', default='def.jpg')
    image_three = models.ImageField(upload_to='media', default='def.jpg')
    product_description = models.TextField()

#Toys
class Toy(Product):
    CATS = (
        ("BT", "Boy Toys"),
        ("GT", "Girl toys"),
        ("BbyT", "Baby toys")
    )
    Category=models.CharField(max_length=10, choices=CATS)

views.py:

class ProductList(ListView):
    model = Product

def Productdetail(request,pk):
    product= Product.objects.get(id=id)
    context = {'product': product}
    return render(request, 'ecomm/product.html', context)
    .
    .
    .

my urls.py:

from django.urls import path
from . import views
from .views import ProductList, Productdetail
urlpatterns = [
    path('', views.home, name='ecomm-home'),
    path('products/', ProductList.as_view()),
    path('products/<int:pk>/', Productdetail, name='product_detail'),
    ....

product_detail.html:

{% extends "base.html" %}

{% block content %}
    <h2>Product</h2>
    {{product.product_title}}
{% endblock %}

girls_toys.html:

{% extends "ecomm/base.html" %}
{% block content %}

<style>
.prod{
    text-align:center;
    padding-left:50px;
    width:500px;
    display:block;
    float:left;
    padding-top:50px;
    }
.header{
    font-size:40px;
    font-family:serif;
    }
</style>
<center><h class="header"> Shop girl toys </h></center>
<br>
{% for t in toys %}
    {% if t.Category == 'GT' %}
        <div class="prod">
            <a href="{% url 'product_detail' t.id %}"><img src="{{t.image_one.url}}" height="200px" width="250px"></a>
            <p> {{t.product_title}}</p>
            <p> {{t.product_price}} EGP</p>
        </div>

    {% endif %}
{% endfor %}
{% endblock %}

Я получаю эту ошибку:

Reverse for 'product_detail' with arguments '('',)' not found. 1 pattern(s) tried: ['products/(?P<pk>[0-9]+)/$']

Я думаю, что проблема в t.id или <pk>, я не уверен, как это исправить. Есть предложения?

В views.py, product= Product.objects.get(id=pk) вы передаете значение pk, поэтому id=pk, а не id=id

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