khaganat-web/navbar/templatetags/navbar.py
2020-02-19 14:07:59 +01:00

57 lines
1.7 KiB
Python

from django.utils.translation import get_language_info
from django.utils.translation import gettext_lazy as _
from django.utils.translation import activate as activate_lang
from django.utils.translation import get_language
from django.template.response import TemplateResponse
from django.utils.safestring import mark_safe
from django.urls import reverse, resolve
from django.shortcuts import render
from navbar.models import Element
from django.conf import settings
from django import template
import re
register = template.Library()
path_re = re.compile("^(/[a-z]+)/(.*)")
def get_lang_name(lang_code):
li = get_language_info(lang_code)
return li["name_local"]
def get_lang_data(path_info, lang_code, curr_lang):
lang_name = get_lang_name(lang_code)
rm = resolve(path_info)
activate_lang(lang_code)
if path_info == "/":
lang_url = f"/{lang_code}/"
else:
lang_url = reverse(
rm.view_name, current_app="npb", args=rm.args, kwargs=rm.kwargs
)
activate_lang(curr_lang)
return (lang_code, lang_name, lang_url)
def get_base_context(lang, url):
return {
"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],
}
@register.simple_tag(takes_context=True)
def navbar(context):
request = context["request"]
curr_lang = get_language()
ctx = get_base_context(curr_lang, request.path_info)
ctx["user"] = request.user
tpl = TemplateResponse(request, "navbar/navbar.html", context=ctx).render()
return mark_safe(tpl.rendered_content)