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?

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