Django получает неожиданный аргумент ключевого слова 'slug'

Я получаю ошибку, но не могу понять, как ее исправить: (MainPage.get() получил неожиданный аргумент ключевого слова 'slug')

Это моя модель:

class Book(models.Model):
   title = models.CharField(max_length=256)
   price = models.IntegerField()
   category = models.ForeignKey('Category', on_delete=models.PROTECT)
   created_date = models.DateField(auto_now_add=True)
   description = models.TextField(blank=True, null=True)
   count = models.IntegerField(default=0)
   author = models.ForeignKey('Author', on_delete=models.PROTECT)

class Category(models.Model):
   name = models.CharField(max_length=256)
   slug = models.SlugField(blank=True, unique=True, allow_unicode=True)
   created_date = models.DateField(auto_now_add=True)

Вот мое мнение:

class MainPage(View):
   def get(self, request):
       books = models.Book.objects.all()
       return render(request, 'core/index.html', {'books': books})

class CategoryPage(View):
   def get(self, request):
       categories = models.Category.objects.all()
       return render(request, 'core/category.html', {'categories': categories})

Вот мои урлы:

urlpatterns = [
path('', views.MainPage.as_view(), name='MainPage'),
path('category/', views.CategoryPage.as_view(), name='Category'),
path('category/<slug:slug>/', views.MainPage.as_view(), name='BookList')]

Когда вы используете 'category/<slug:slug>/', django передает slug вашему представлению.

Итак, либо используйте **kwargs в представлении, либо объявите slug как параметр в представлении:

class MainPage(View):
   def get(self, request, *args, **kwargs):
       # get slug from kwargs and use it as you want
       books = models.Book.objects.all()
       return render(request, 'core/index.html', {'books': books})

Or:

class MainPage(View):
   def get(self, request, slug):
       # Use slug as you want
       books = models.Book.objects.all()
       return render(request, 'core/index.html', {'books': books})

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