Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Организация каталога товаров с вложеными категориями [RSS Feed]

#1 Янв. 4, 2012 14:31:47

mks
От:
Зарегистрирован: 2009-08-07
Сообщения: 80
Репутация: +  5  -
Профиль   Отправить e-mail  

Организация каталога товаров с вложеными категориями

День добрый, всех с прошедшим Новым Годом :)

Подскажите как правильно организовать каталог товаров.
Хотелось бы иметь такую структуру путей:
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 шаблона, но это мне тоже не нравится. Есть ли более правильное решение в том смысле чтобы не было дублирования кода видовых функций и кода в шаблоне ?



Офлайн

#2 Янв. 4, 2012 14:58:24

magnet85
От:
Зарегистрирован: 2009-04-13
Сообщения: 91
Репутация: +  2  -
Профиль   Отправить e-mail  

Организация каталога товаров с вложеными категориями

Можно велосипед не изобретать. Посмотрите https://github.com/django-mptt/django-mptt/ , пример использования: http://proft.me/2010/09/7/drevovidnye-struktury-dannyh-v-django/



Офлайн

#3 Янв. 4, 2012 15:36:57

mks
От:
Зарегистрирован: 2009-08-07
Сообщения: 80
Репутация: +  5  -
Профиль   Отправить e-mail  

Организация каталога товаров с вложеными категориями

Спасибо, ссылки посмотрел. Но меня больше интересует не готовая библиотека а алгоритм действий который бы ложился на джанговскую логику работы. Скажите при моей организации url как в шаблоне организовать получение ссылки на объекты подкатегорий. Всё что приходит на ум это передавать глубину вложений в шаблон и там в зависимости от неё вызывать функцию вида с нужным числом параметров. Или может такая структура url изначально порочна и лучше сделать так:
catalog/shop/category/ - для любой глубины ссылка одной структуры ?



Офлайн

  • Начало
  • » Django
  • » Организация каталога товаров с вложеными категориями[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version