Skip to content

Instantly share code, notes, and snippets.

@CBoJI
Created October 17, 2012 08:18
Show Gist options
  • Save CBoJI/3904351 to your computer and use it in GitHub Desktop.
Save CBoJI/3904351 to your computer and use it in GitHub Desktop.
работа с каталогом по одному урлу
# в урле ###
url(r'^products/(?P<category_slug>[-/\w\d]+)/$', catalog, name='category'),
############
def catalog(request, category_slug=None):
vars = {}
product = None
product_list = []
if category_slug:
slugs = category_slug.split('/')
try:
product = Product.objects.get(slug=slugs[-1])
except Product.DoesNotExist:
// обработчик для категории
try:
category = Category.objects.get(slug=slugs[-1])
except Category.DoesNotExist:
raise Http404
else:
if category.check_slugs(slugs):
vars.update({'category': category, 'breadcrumbs': category.get_breadcrumbs()})
product_list = Product.objects.filter(status=1, category=category).order_by('order')
else:
raise Http404
else:
pass
// обработчик для продукта
# в моделе ##
def check_slugs(self, slugs):
if isinstance(slugs, list) or isinstance(slugs, tuple):
page = self.parent
i = len(slugs) - 1
while page:
print page, page.slug, slugs[i]
i -= 1
try:
if page.slug != slugs[i]:
return False
except IndexError:
if page.parent:
return False
page = page.parent
return True
else:
raise TypeError('Slugs must be list or tuple')
#############
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment