Форум сайта python.su
День добрый, всех с прошедшим Новым Годом :)
Подскажите как правильно организовать каталог товаров.
Хотелось бы иметь такую структуру путей:
catalog/shop/ - корень магазина
catalog/shop/cat1/ - первый уровень вложености
catalog/shop/cat1/cat2/ - второй уровень
Сейчас я сделал одну функцию вида:
def show_catalog(request, shop, cat1, cat2):
cont = RequestContext(request, {})
if cat2 != None: # зашли в под под раздел
parent1 = Category.objects.get(id__exact=cat1, shop__exact=shop)
parent2 = Category.objects.get(id__exact=cat2, shop__exact=shop)
cont['link_path']=[shop, parent1.name, parent2.name]
return render_to_response('catalog.html',context_instance=cont)
elif cat1 != None: # зашли в под раздел
cat_list = Category.objects.filter(parent_category__exact=cat1, shop__exact=shop)
cont['cat_list'] = cat_list
parent1 = Category.objects.get(id__exact=cat1, shop__exact=shop)
cont['link_path']=[shop, parent1.name]
cont['shop'] = shop
return render_to_response('catalog.html',context_instance=cont)
else: # зашли в корень магазина
cat_list = Category.objects.filter(parent_category__exact=None, shop__exact=shop)
cont['cat_list'] = cat_list
cont['shop'] = shop
cont['link_path'] = [shop]
return render_to_response('catalog.html',context_instance=cont)
url(r'^catalog/(?P<shop>[a-zA-Z0-9]{1,50})/$', 'show_catalog', {'cat1':None, 'cat2':None}, name='catalog'),
url(r'^catalog/(?P<shop>[a-zA-Z0-9]{1,50})/(?P<cat1>[a-zA-Z0-9]{1,50})/$', 'show_catalog', {'cat2':None}, name='catalog_cat1'),
url(r'^catalog/(?P<shop>[a-zA-Z0-9]{1,50})/(?P<cat1>[a-zA-Z0-9]{1,50})/(?P<cat2>[a-zA-Z0-9]{1,50})/$', 'show_catalog', name='catalog_cat2'),
{% for cat in cat_list %}
<li><a href="{% url catalog_cat1 shop=shop cat1=cat.id %}">{{ cat.name }}</a></li>
{% endfor %}
Офлайн
Можно велосипед не изобретать. Посмотрите https://github.com/django-mptt/django-mptt/ , пример использования: http://proft.me/2010/09/7/drevovidnye-struktury-dannyh-v-django/
Офлайн
Спасибо, ссылки посмотрел. Но меня больше интересует не готовая библиотека а алгоритм действий который бы ложился на джанговскую логику работы. Скажите при моей организации url как в шаблоне организовать получение ссылки на объекты подкатегорий. Всё что приходит на ум это передавать глубину вложений в шаблон и там в зависимости от неё вызывать функцию вида с нужным числом параметров. Или может такая структура url изначально порочна и лучше сделать так:
catalog/shop/category/ - для любой глубины ссылка одной структуры ?
Офлайн