khaganat-web/navbar/templatetags/navbar.py

57 lines
1.7 KiB
Python
Raw Permalink Normal View History

2018-01-28 11:09:15 +00:00
from django.utils.translation import get_language_info
2018-01-27 22:12:09 +00:00
from django.utils.translation import gettext_lazy as _
2018-01-28 11:09:15 +00:00
from django.utils.translation import activate as activate_lang
2018-01-27 22:12:09 +00:00
from django.utils.translation import get_language
2018-01-21 12:44:00 +00:00
from django.template.response import TemplateResponse
from django.utils.safestring import mark_safe
2018-01-28 11:09:15 +00:00
from django.urls import reverse, resolve
2018-01-21 12:44:00 +00:00
from django.shortcuts import render
from navbar.models import Element
from django.conf import settings
from django import template
import re
2018-01-27 22:12:09 +00:00
2018-01-21 12:44:00 +00:00
register = template.Library()
2019-07-24 17:07:41 +00:00
path_re = re.compile("^(/[a-z]+)/(.*)")
2018-01-21 12:44:00 +00:00
2018-01-27 22:12:09 +00:00
2018-01-21 12:44:00 +00:00
def get_lang_name(lang_code):
2018-01-28 11:09:15 +00:00
li = get_language_info(lang_code)
2019-07-24 17:07:41 +00:00
return li["name_local"]
2018-01-21 12:44:00 +00:00
2018-01-27 22:12:09 +00:00
def get_lang_data(path_info, lang_code, curr_lang):
2018-01-28 11:09:15 +00:00
lang_name = get_lang_name(lang_code)
rm = resolve(path_info)
2018-01-28 11:09:15 +00:00
activate_lang(lang_code)
2020-02-06 11:39:44 +00:00
if path_info == "/":
lang_url = f"/{lang_code}/"
else:
2020-02-19 13:07:59 +00:00
lang_url = reverse(
rm.view_name, current_app="npb", args=rm.args, kwargs=rm.kwargs
)
2018-01-28 11:09:15 +00:00
activate_lang(curr_lang)
return (lang_code, lang_name, lang_url)
2018-01-21 12:44:00 +00:00
2018-01-27 22:12:09 +00:00
def get_base_context(lang, url):
return {
2019-07-24 17:07:41 +00:00
"user": None,
"current_url": url,
"elems": Element.objects.filter(parent=None).order_by("weight"),
"current_lang_code": lang,
"current_lang_name": get_lang_name(lang),
"all_langs": [get_lang_data(url, l[0], lang) for l in settings.LANGUAGES],
2018-01-21 12:44:00 +00:00
}
@register.simple_tag(takes_context=True)
def navbar(context):
2019-07-24 17:07:41 +00:00
request = context["request"]
curr_lang = get_language()
ctx = get_base_context(curr_lang, request.path_info)
2019-07-24 17:07:41 +00:00
ctx["user"] = request.user
tpl = TemplateResponse(request, "navbar/navbar.html", context=ctx).render()
2018-01-21 12:44:00 +00:00
return mark_safe(tpl.rendered_content)