import json from django.http import HttpResponse, Http404, FileResponse, HttpResponseRedirect from django.template import loader, RequestContext from django.contrib.auth.decorators import login_required from .models import * from django.conf import settings from GeneralApp.funcs import get_inter_http_respose from django.utils.translation import gettext_lazy as _ from django.urls import reverse from collections import OrderedDict def get_tree_arts(art, arts, sel_arts_ids): docs_tree = OrderedDict() docs_tree.update({ art_item.name: { 'url': art_item.url, 'id': art_item.id, 'children': get_tree_arts(art_item, arts, sel_arts_ids), 'active': art_item.id in sel_arts_ids } for art_item in arts.filter(parent=art) }) return docs_tree # def get_tree_arts(art, arts): # # docs_tree = OrderedDict() # docs_tree.update({ # art['name']: { # 'url': art['url'], # 'id': art['id'], # 'children': get_tree_arts(art, DocArt.objects.filter(parent=art)), # } for art in arts.filter(parent=None) # }) # return docs_tree def DocsView(request, version=None, art_url=None): if art_url and version: kwargs = { 'enable': True, 'url': art_url, 'versions__url': version, } try: art = DocArt.objects.get(**kwargs) try: vers_obj = DocVersion.objects.get(enable=True, url=version) except DocVersion.DoesNotExist: raise Http404 active_arts, active_arts_ids = art.get_parents_path() arts = DocArt.objects.filter(enable=True, versions=vers_obj).order_by('order') doc_tree = get_tree_arts(None, arts, active_arts_ids) versions = DocVersion.objects.exclude( rel_docArts_for_version=None ).filter( enable=True, ).order_by('order', 'name') breadcrumbs = OrderedDict({ 'Документация и техническая поддержка': reverse('docs_main'), f'Документация для версии {version}': reverse( 'docs_version_page', kwargs={'version': version}), }) breadcrumbs.update({ item.name: reverse( 'docs_art_page', kwargs={'version': version, 'art_url': item.url} ) for item in active_arts }) Dict = { 'cur_article': art, 'cur_version': vers_obj, 'doc_tree': doc_tree, 'allow_versions': versions, 'breadcrumbs': breadcrumbs, 'prev_article': art.get_prev_article(version=vers_obj), 'next_article': art.get_next_article(version=vers_obj) } t = loader.get_template('pages/p_documentation.html') return get_inter_http_respose(t, Dict, request) except DocArt.DoesNotExist: raise Http404 if version: try: vers_obj = DocVersion.objects.get(enable=True, url=version) if vers_obj: art = vers_obj.get_article() if art: url = reverse( 'docs_art_page', kwargs={'version': version, 'art_url': art.url} ) return HttpResponseRedirect(url) except DocVersion.DoesNotExist: raise Http404 art = DocArt.objects.exclude( versions=None ).filter( enable=True, parent=None ).order_by('-versions__order', 'order').first() if art: url = reverse( 'docs_art_page', kwargs={'version': art.versions.order_by('order').first().url, 'art_url': art.url} ) return HttpResponseRedirect(url) if not art: raise Http404