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 в качестве параметров. Вы можете расширить этот параметр до любого количества параметров.

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