Найти - Пользователи
Полная версия: Организация каталога товаров с вложеными категориями
Начало » Django » Организация каталога товаров с вложеными категориями
1
mks
День добрый, всех с прошедшим Новым Годом :)

Подскажите как правильно организовать каталог товаров.
Хотелось бы иметь такую структуру путей:
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)
link_path - это список в котором хранится путь до текущего раздела
cat_list - список подразделов текущего раздела

в urls.py прописано так:
    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 %}
Для других разделов получается надо писать другой шаблон в котором прописывать соответствующую метку url и передавать другое число параметров. Это решение кажется мне плохим. Можно сделать 3 разных функции вида и 3 шаблона, но это мне тоже не нравится. Есть ли более правильное решение в том смысле чтобы не было дублирования кода видовых функций и кода в шаблоне ?
magnet85
Можно велосипед не изобретать. Посмотрите https://github.com/django-mptt/django-mptt/ , пример использования: http://proft.me/2010/09/7/drevovidnye-struktury-dannyh-v-django/
mks
Спасибо, ссылки посмотрел. Но меня больше интересует не готовая библиотека а алгоритм действий который бы ложился на джанговскую логику работы. Скажите при моей организации url как в шаблоне организовать получение ссылки на объекты подкатегорий. Всё что приходит на ум это передавать глубину вложений в шаблон и там в зависимости от неё вызывать функцию вида с нужным числом параметров. Или может такая структура url изначально порочна и лучше сделать так:
catalog/shop/category/ - для любой глубины ссылка одной структуры ?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB