Как сделать главную страницу категории?
Приветствую! У меня есть следующий код:
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 ...