def _model_catalog(request, context, ModelCls, related_name="", SubmenuCls=None, submenu_obj_id=None, submenu_id="all", show_menu=True, submenu_header=None, submenu_url_prefix="", submenu_is_main=False): """ ModelCls - модель элементов SubmenuCls - модель типов элементов submenu_id - slug типа элементов """ # Временное решение если нет этих элементов мы их добавим if context.get('news_category_list', None) is None: context.update(category_to_context(None)) # Если мы выбираем все элементы независимо от типа if submenu_id == "all" or SubmenuCls == None: if submenu_is_main == True: objects = [] context["submenu_is_main"] = True else: objects = ModelCls.objects.filter(published=True, site__id=settings.SITE_ID) # Иначе нам надо выбрать только элементы определенного типа else: submenu_obj_q = SubmenuCls.objects.filter(slug=submenu_id, site__id=settings.SITE_ID) if len(submenu_obj_q) == 0: raise Http404 else: # берем первый и по ходу единственный аргумент, если это так # то все эти строчки можно заменить на get_or_http404 submenu_obj = submenu_obj_q[0] # head_obj - хранит тип элементов context["head_obj"] = submenu_obj # objects_cat_name - хранит имя типа context["objects_cat_name"] = get_object_cat_name(submenu_obj) kwargs = {} kwargs[submenu_obj_id] = submenu_obj kwargs["published"] = True kwargs["site__id"] = settings.SITE_ID objects = ModelCls.objects.filter(**kwargs) if ModelCls == Publication: objects = objects.order_by("mainTitle") # objects_name - хранит название модели элементов context["objects_name"] = ModelCls._meta.verbose_name_plural context["model_slug"] = ModelCls.site_slug # objects - объекты context["objects"] = objects top_ten = [] if not isinstance(objects, list): top_ten = objects.order_by('?')[:10] context["top_ten"] = top_ten # Если у нас есть тип элементов и мы показываем меню if SubmenuCls is not None and show_menu: objects = list(SubmenuCls.objects.annotate(num_objects=Count(related_name))\ .filter(num_objects__gt=0, site__id=settings.SITE_ID).order_by("-num_objects")) for object in objects: subobjects = getattr(object, related_name).filter(site__id=settings.SITE_ID) object.num_objects = len(subobjects) if object.num_objects == 0: objects.remove(object) objects = [{ "name": (obj.name if hasattr(obj, "name") else obj.connected_title()), "num_objects": obj.num_objects, "url": obj.get_url_for(related_name), "object": obj, } for obj in objects] if len(objects) > 1: # submenu_objects - хранит типы объектов context["submenu_objects"] = objects context["submenu_name"] = (submenu_header if submenu_header else SubmenuCls._meta.verbose_name_plural) context["submenu_url_prefix"] = submenu_url_prefix context["show_menu"] = show_menu context["template_name"] = related_name # hardcode if ModelCls == MusicPage: context["is_music_page"] = True #context["spec_projects"] = SpecProject.published_on_site.all().order_by('?')[:2] print ("submenu_id ", submenu_id) # ???????????????????? if settings.SITE_ID == 1: if submenu_id is not "all": print("submenu_id is not all ") # ???????????????????? return render(request, "encyclopedia/rubric.html", context) return render(request, "compositions.html", context) elif os.environ['DJANGO_SPLIT_SETTINGS_MODULE'] == 'ON': return render(request, "dic.html", context) else: return render(request, "universal_catalog.html", context)