我有以下问题。
我想在此URL上有一个detailview:127.0.0.1:8000/<category-name>/<product-name>
(category-name
和product-name
是子域。)直接从索引页面开始。请帮助:(
我的错误:
NoReverseMatch at /products/ Reverse for 'ProductDetail' with arguments '('new-things', 'flower-pot')' not found. 1 pattern(s) tried: ['products\\/\\<slug\\:category\\.slug\\>\\/\\<slug\\:product\\.slug\\>$']
我(相关部分)index.html:
{% for p in Product %}
<a href="{% url 'product:ProductDetail' p.category.slug p.slug %}">{{ p.name}}</a>
{% endfor %}
我的(相关部分)urls.py:
from .models import *
app_name = 'product'
urlpatterns = [
path('product/<slug:category.slug>/<slug:product.slug>', views.ProductDetailView.as_view(), name="ProductDetail"),
]
和(相关部分)我的模型。py:
class Product(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
category = models.ForeignKey(Category, on_delete=models.CASCADE)
slug = models.SlugField(blank=True, null=True)
def save(self, *args, **kwargs):
if not self.id:
# Newly created object, so set slug
self.slug = slugify(self.name)
super(Product, self).save(*args, **kwargs)
def __str__(self):
return self.name
class Category(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
slug = models.SlugField(blank=True, null=True)
def save(self, *args, **kwargs):
if not self.id:
# Newly created object, so set slug
self.slug = slugify(self.name)
super(Category, self).save(*args, **kwargs)
def __str__(self):
return self.name
答案 0 :(得分:1)
在参数名称中使用点没有意义。使用下划线:
path('product/<slug:category_slug>/<slug:product_slug>', views.ProductDetailView.as_view(), name="ProductDetail"),
但是,当您尝试通过产品来引用类别时,这仍然无法真正起作用。但是您的模型在“产品”和“类别”之间没有任何关系。我假设您需要从Product到Category的ForeignKey。
答案 1 :(得分:0)
首先,Product
模型没有category
。将ForeignKey
附加到您的Product
模型中。
class Product(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
slug = models.SlugField(blank=True, null=True)
category = models.ForeignKey('Category', on_delete=models.CASCADE) # change on_delete what you want.
def save(self, *args, **kwargs):
if not self.id:
# Newly created object, so set slug
self.slug = slugify(self.name)
super(Product, self).save(*args, **kwargs)
def __str__(self):
return self.name
第二。您的网址设置有误。您不能在url参数中使用.
。更改您的代码。
urlpatterns = [
path('product/<slug:category_slug>/<slug:product_slug>', views.ProductDetailView.as_view(), name="ProductDetail"),
]