Files
Aerbim/DocsApp/views.py
2024-07-15 15:25:44 +03:00

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