Отображает иерерхический список категорий каталога.
    Для каждой категории отображается количество содержащегося в ней товара.

    Пример использования::

        {% catalog_sections 'section_slug' 2 class='catalog-class' %}

    :param context: контекст
    :param slug: символьный код родительской категории, если не задан, отображается вся иерархия
    :param level: отображаемый уровень вложенности
    :param kwargs: html атрибуты оборачивающего тега
    :return:

def catalog_sections(context, slug=None, level=3, **kwargs):
    """
    Отображает иерерхический список категорий каталога.
    Для каждой категории отображается количество содержащегося в ней товара.

    Пример использования::

        {% catalog_sections 'section_slug' 2 class='catalog-class' %}

    :param context: контекст
    :param slug: символьный код родительской категории, если не задан, отображается вся иерархия
    :param level: отображаемый уровень вложенности
    :param kwargs: html атрибуты оборачивающего тега
    :return:
    """
    count_products = Count(Case(When(product__active=True, then=Value(1)), output_field=IntegerField()))
    if slug is None:
        sections = Section.objects.annotate(product__count=count_products).all()
        max_level = level - 1
    else:
        section = Section.objects.get(slug=slug)
        sections = section.get_descendants().annotate(product__count=count_products).all()
        max_level = section.level + level
    mark_current_menus(sections, context['request'].path_info)
    return {'sections': sections, 'max_level': max_level, 'data': kwargs}