129 lines
4.0 KiB
Python
129 lines
4.0 KiB
Python
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.id: {
|
|
'url': art_item.url,
|
|
'name': art_item.name,
|
|
# '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', '-versions__name', '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
|
|
|
|
|
|
|