Как создать индивидуальную страницу товара с помощью 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