Django - отсутствует 1 необходимый позиционный аргумент: 'category_slug'
я продолжаю получать эту ошибку в каждом представлении моего проекта Django: categoryFilter() missing 1 required positional argument: 'category_slug'
.
website - это название моего приложения.
Я не знаю, почему я продолжаю получать эту ошибку, и я новичок в Django, поэтому ваша помощь делает меня счастливым. Вот мои файлы django views.py, urls.py, models.py и settings.py,
Мой views.py:
from django.shortcuts import render
from django.shortcuts import get_object_or_404
from .models import Service, Category
# Create your views here.
def home(request):
return render(request, "website/home.html")
def services(request):
return render(request, "website/services.html")
def allCategories(request):
return {
'categories': Category.objects.all()
}
def portfolio(request):
service = Service.objects.all()
return render(request, "website/portfolio.html", {'services': service})
def serviceDetail(request, slug):
service = get_object_or_404(Service, slug = slug, is_active = True)
def categoryFilter(request, category_slug):
selected = get_object_or_404(Category, slug = category_slug)
service = Service.objects.filter(category = selected)
return render(request, 'website/portfolio-category.html', {'category': selected, 'service': service})
Мой urls.py:
from django.urls import path
from . import views
# app_name = 'website'
urlpatterns = [
path('', views.home, name = 'home'),
path('index', views.home),
path('services', views.services, name = 'services'),
path('portfolio', views.portfolio, name = 'portfolio'),
path('our-story', views.our_story, name = 'our_story'),
path('contact-us', views.contact_us, name = 'contact_us'),
path('login', views.login, name = 'login'),
path('register', views.register, name = 'register'),
path('profile', views.profile, name = 'profile'),
path('cart', views.cart, name = 'cart'),
path('search/<slug:category_slug>/', views.categoryFilter, name="categoryFilter"),
path('service/<slug:slug>/', views.serviceDetail, name="serviceDetail")
]
Мой models.py:
from django.db import models
from django.urls import reverse
class Category(models.Model):
name = models.CharField(max_length = 100, db_index = True)
slug = models.SlugField(max_length = 105, unique = True)
class Meta:
verbose_name_plural = 'Categories'
def get_absolute_url(self):
return reverse('categoryFilter', args = [self.slug])
# return reverse("categoryFilter", kwargs={"slug": self.slug})
def __str__(self):
return self.name
class Service(models.Model):
category = models.ForeignKey(Category, related_name = 'service', on_delete=models.CASCADE)
name = models.CharField(max_length = 100)
description = models.TextField(blank = True)
image = models.ImageField(upload_to = 'static/website/img/')
bigImage = models.ImageField(upload_to = 'static/website/img/')
slug = models.SlugField(max_length = 105, unique = True)
price = models.DecimalField(max_digits = 7, decimal_places = 2)
is_active = models.BooleanField(default = True)
class Meta:
verbose_name_plural = 'Services'
def __str__(self):
return self.name
Мой settings.py:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
BASE_DIR / "templates"
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'website.views.allCategories',
'website.views.categoryFilter',
],
},
},
]
Вы должны удалить 'website.views.allCategories'
и 'website.views.categoryFilter'
из списка context_processors
в settings.py
. Когда вы помещаете функцию в качестве контекстного процессора, она выполняется каждый раз при получении запроса, но функции allCategories и categoryFilter принимают еще один аргумент помимо запроса, но вы не можете предоставить дополнительные аргументы, когда добавляете их в качестве контекстных процессоров
Контекстные процессоры должны принимать только объект запроса и возвращать словарь. Посмотрите этот ответ, чтобы узнать, что такое контекст и как следует использовать контекстный процессор: Что такое контекст в Django?