Как сделать главную страницу категории?

Приветствую! У меня есть следующий код:

urls.py

re_path(r'^category/(?P<hierarchy>.+)/$', show_category, name='category'),

views.py

def show_category(request, hierarchy=None):
    category_slug = hierarchy.split('/')
    parent = None
    root = Categories.objects.all()

for slug in category_slug[:-1]:
    parent = root.get(parent=parent, slug=slug)

try:
    instance = Categories.objects.get(parent=parent, slug=category_slug[-1])
except:
    instance = get_object_or_404(Goods, slug=category_slug[-1])
    return render(request, "shop/product.html", {'instance': instance})
else:
    return render(request, 'shop/categories.g.html', {'instance': instance})

Модель категории имеет структуру: id, slug, imagePath, parent

Я много гуглил и не нашел хорошего ответа на свой вопрос. Помогите пожалуйста, этот скрипт отображает только категории по адресу localhost/category/(имя родительской категории) и на один уровень выше. И проблема в том, что я не могу сделать главную страницу категории вообще (localhost/category), пожалуйста, помогите или направьте меня в правильном направлении, чтобы решить эту проблему!

Я схожу с ума, пытаясь решить эту проблему. Пробовал и гуглить и копаться в документации. Никак не могу решить.

Если вы измените ваш regexp на

re_path(r'^category/(?P<hierarchy>.*)$', show_category, name='category'),

он также будет соответствовать просто category/.

Затем вы можете изменить свой вид на что-то вроде

def show_category(request, hierarchy=None):
   hierarchy = (hierarchy or "").strip("/")  # Remove stray slashes
   if hierarchy:
       category_slug = hierarchy.split('/')
       parent = None
       for slug in category_slug[:-1]:
           parent = Categories.objects.get(parent=parent, slug=slug)
       category = Categories.objects.get(parent=parent, slug=category_slug[-1])
   else:
       category = None
       
   if category:
       return render(request, 'shop/categories.g.html', {'instance': category})
   # No category, show top-level content somehow
   return ...
Вернуться на верх