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})