Files
Aerbim/DocsApp/views.py
2024-07-11 16:58:58 +03:00

103 lines
2.8 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):
docs_tree = OrderedDict()
docs_tree.update({
art_item.name: {
'url': art_item.url,
'id': art_item.id,
'children': get_tree_arts(art_item, arts),
} 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 = {
'url': art_url,
'versions__url': version,
}
try:
art = DocArt.objects.get(**kwargs)
try:
vers_obj = DocVersion.objects.get(url=version)
except DocVersion.DoesNotExist:
raise Http404
arts = DocArt.objects.filter(enable=True, versions=vers_obj).order_by('order')
doc_tree = get_tree_arts(None, arts)
Dict = {
'cur_article': art,
'cur_version': vers_obj,
'doc_tree': doc_tree
}
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(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