Необязательные параметры Django с методом Django Path

Я пытаюсь вызвать один и тот же метод с несколькими URL (один без параметра). Когда я вызываю функцию, она вызывается несколько раз с параметром pk=None. Есть ли способ исправить это или почему нужно использовать необязательный параметр с методом path в Django

Здесь я предоставляю свой код

Urls.py

path('category/<str:pk>/', CategoryView.as_view(), name="category"),
path('category/', CategoryView.as_view(), name="category"),

views.py

class CategoryView(View):
    TEMPLATES_NAME = 'home/category.html'
    def get(self, request,pk=None):
        base_category = BaseCategory.objects.filter(is_active=True)
        category_list = Category.objects.filter(is_active=True)
        if pk is not None:
            slug=pk
            if BaseCategory.objects.filter(slug=slug, is_active=True).exists():
                return render(request,self.TEMPLATES_NAME,{'base_category':base_category,'category_list':category_list ,'slug':slug})  
            else:
                raise PermissionDenied()
        return render(request,self.TEMPLATES_NAME,{'base_category':base_category,'category_list':category_list})
    
    def post(self, request):
        return render(request,self.TEMPLATES_NAME)


logs

Forbidden (Permission denied): /category/null/
Traceback (most recent call last):
  File "/home/hrishi/.virtualenvs/orgved/lib/python3.10/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/home/hrishi/.virtualenvs/orgved/lib/python3.10/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/hrishi/.virtualenvs/orgved/lib/python3.10/site-packages/django/views/generic/base.py", line 70, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/hrishi/.virtualenvs/orgved/lib/python3.10/site-packages/django/views/generic/base.py", line 98, in dispatch
    return handler(request, *args, **kwargs)
  File "/home/hrishi/Desktop/Django Projects/orgved/apps/home/views.py", line 95, in get
    raise PermissionDenied()
django.core.exceptions.PermissionDenied
[16/Dec/2021 16:03:41] "GET /category/null/ HTTP/1.1" 200 3368
[16/Dec/2021 16:03:41] "GET /category/ HTTP/1.1" 200 35368

Проблема в вашем случае заключается в том, что вы пытаетесь получить доступ к url /category/null. В этом случае колба присваивает строку 'null' пк, поэтому pk is not None удовлетворяется.

Просто используйте url /category/, который будет работать нормально, а pk получит значение None

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