TypeError: subcategory() получил неожиданный аргумент ключевого слова 'cslug'
У меня есть URL путь следующего вида: www.example.com/caetegory/mens/mens-shoes
Как вы видите, в данном примере путь URL включает 3 слизи.
У меня есть 3 разных класса для этих категорий. И slug включается в каждую из них отдельно. Что мне нужно сделать, чтобы иметь возможность отображать продукт в соответствии с подкатегорией. Любая помощь или мысль будет высоко оценена. Я не могу найти ни одного источника для этого.
URLS.py
models.py
Class Category(models.Model):
cat_name= models.CharField(max_length=200)
slug = models.SlugField(max_length=200)
description = models.TextField()
cat_image = models.ImageField(upload_to ='media/category', blank=True)
class Meta:
verbose_name = 'category'
verbose_name_plural = 'categories'
def get_url(self):
return reverse('product_by_category', args=[self.slug])
def __str__(self):
return self.cat_name
class SubCategory(models.Model):
cat_name = models.ForeignKey(Category, on_delete=models.CASCADE, null=True)
subcat_name =models.CharField(max_length = 200)
slug = models.SlugField(max_length=200)
description = models.TextField(blank=True)
subcat_image = models.ImageField(upload_to ='media/subcategory', blank=True)
def __str__(self):
return self.subcat_name
class SubSubCategory(models.Model):
subcat_name = models.ForeignKey(SubCategory, on_delete=models.CASCADE, null = True)
subsubcat_name = models.CharField(max_length=200)
slug = models.SlugField(max_length=200)
description = models.TextField(blank=True)
subsubcat_image = models.ImageField(upload_to = 'media/subsubcategory', blank=True)
class Meta:
verbose_name = 'subsubcategory'
verbose_name_plural = 'subsubcategories'
def __str__(self):
return self.subsubcat_name
class Products(models.Model):
product_name = models.CharField(max_length=200)
slug = models.SlugField(max_length=200)
price = models.DecimalField(max_digits=50, decimal_places=3)
images = models.ImageField(upload_to ='media/products', blank=True)
is_available = models.BooleanField(default=True)
category = models.ForeignKey(SubSubCategory, on_delete=models.SET_NULL, null=True)
description = models.TextField(default='abc')
subcategory = models.ForeignKey(SubCategory, on_delete=models.SET_NULL, null=True, blank=True)
def __str__(self):
return self.product_name
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('<slug:cat_slug>', views.category, name='category'),
path('<slug:cslug>/<slug:sslug>', views.subcategory, name='subcat'),
]
views.py
from django.shortcuts import render
from category import models
from products.models import Products
from .models import SubCategory, Category, SubSubCategory
def category(request, cat_slug):
product = Products.objects.filter(subcategory__cat_name__slug=cat_slug)
count = product.count()
return render(request, 'myproject/store.html', {
'product':product ,
'count':count,
})
def subcategory(request, sslug):
product = Products.objects.filter(subcategory__slug=sslug)
count = product.count()
return render(request, 'myproject/store2.html', {'product':product, 'count':count})
contextproessor.py
from .models import Category, SubCategory, SubSubCategory
from .models import Category
def category_links(request):
subcategory = SubCategory.objects.all()
subsubcategory = SubSubCategory.objects.all()
category = Category.objects.all()
return dict(category=category, subcategory=subcategory, subsubcategory=subsubcategory)
Внутренний html-файл .html
<ul class="dropdown-menu">
{% for c in category %}
<li><a class="dropdown-item" href="{% url 'category' c.slug %}"> {{c.cat_name}} </a>
<ul class="submenu dropdown-menu">
{% for s in subcategory %}
{% if s.cat_name.slug == c.slug %}
<!--or s.catname_id == c.id -->
<li><a class="dropdown-item" href="{% url 'subcat' cslug=s.cat_name.slug sslug=s.slug %}"> {{s.subcat_name}} </a>
<ul class="submenu dropdown-menu">
{% for ss in subsubcategory %}
{% if ss.subcat_name_id == s.id%}
<li><a class="dropdown-item" href="#"> {{ss.subsubcat_name}}</a></li>
{% endif %}
{% endfor %}
</ul>
</li>
{% endif %}
{% endfor %}
</ul>
</li>
{% endfor%}
</ul>
```
it worked of the category view but it doesnot worked for the subcategory view while using passing two slug in the url
Путь к вашему url должен соответствовать представлению, поэтому в данном url:
path('<slug:cslug>/<slug:sslug>', views.subcategory, name='subcat'),
ожидает два слизня, поэтому соответствующее представление должно принимать два слизня:
def subcategory(request, cslug, sslug):
# rest of your code here
Таким образом, представление subcategory
сможет принимать и cslug
, и sslug
в качестве параметров. Вы можете расширить этот параметр до любого количества параметров.