i keep getting this error in every view of my Django project: categoryFilter() missing 1 required positional argument: 'category_slug'
.
website is my app name.
I don't know why I keep getting this error and I'm new in Django, so your helps make me happy. Here is my django views.py, urls.py, models.py and settings.py files,
My 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})
My 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")
]
My 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
My 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',
],
},
},
]
Portfolio-category.html:
{% extends 'base.html' %}
{% load static %}
{% block title %} Portfolio {% endblock title %}
{% block content %}
<div class="parallax-content projects-content" id="portfolio">
<div class="container">
<div class="">
{% for category in categories %}
<a class="" href="{{ category.get_absolute_url }}"><span> | {{ category.name }} | </span></a>
{% endfor %}
</div>
<div class="row">
<div class="col-md-12">
<div id="owl-testimonials" class="owl-carousel owl-theme">
{% for service in services %}
<div class="item">
<div class="testimonials-item">
<a href="{{ service.bigImage.url }}" data-lightbox="image-1"><img src="{{ service.image.url }}" alt=""></a>
<div class="text-content">
<h4> {{ service.name }} </h4>
<span>₺ {{service.price}} </span>
<button type="button" class="addCart btn btn-warning">Add to Cart!</button>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
</div>
{% endblock content%}