generating language dropdown urls for nav with regex
This commit is contained in:
parent
4c7f60fab7
commit
7a26ceae3e
|
@ -1,15 +0,0 @@
|
||||||
{% extends 'base.html' %}
|
|
||||||
{% load i18n %}
|
|
||||||
{% get_current_language as LANGUAGE_CODE %}
|
|
||||||
{% block languagecode %}{{ LANGUAGE_CODE }}{% endblock languagecode %}
|
|
||||||
{% block title %}{% translate "cscherr.de" %} - {% translate "startpage" %}{% endblock title %}
|
|
||||||
{% block main %}
|
|
||||||
<div class="jumbotron text-center">
|
|
||||||
<h1>400 {% translate "Bad request" %}</h1>
|
|
||||||
<p>{% translate "You sent bad data to the server." %}</p>
|
|
||||||
</div>
|
|
||||||
<div class="container text-center jumbotron my-5" py-5>
|
|
||||||
<h1 class="my-4">{% translate "Looking for anything specific?" %}</h1>
|
|
||||||
{% include 'main_search_form.html' %}
|
|
||||||
</div>
|
|
||||||
{% endblock main %}
|
|
|
@ -1,15 +0,0 @@
|
||||||
{% extends 'base.html' %}
|
|
||||||
{% load i18n %}
|
|
||||||
{% get_current_language as LANGUAGE_CODE %}
|
|
||||||
{% block languagecode %}{{ LANGUAGE_CODE }}{% endblock languagecode %}
|
|
||||||
{% block title %}{% translate "cscherr.de" %} - {% translate "startpage" %}{% endblock title %}
|
|
||||||
{% block main %}
|
|
||||||
<div class="jumbotron text-center">
|
|
||||||
<h1>403 {% translate "Permission denied" %}</h1>
|
|
||||||
<p>{% translate "You are not allowed to access this page." %}</p>
|
|
||||||
</div>
|
|
||||||
<div class="container text-center jumbotron my-5" py-5>
|
|
||||||
<h1 class="my-4">{% translate "Looking for anything specific?" %}</h1>
|
|
||||||
{% include 'main_search_form.html' %}
|
|
||||||
</div>
|
|
||||||
{% endblock main %}
|
|
|
@ -1,15 +0,0 @@
|
||||||
{% extends 'base.html' %}
|
|
||||||
{% load i18n %}
|
|
||||||
{% get_current_language as LANGUAGE_CODE %}
|
|
||||||
{% block languagecode %}{{ LANGUAGE_CODE }}{% endblock languagecode %}
|
|
||||||
{% block title %}{% translate "cscherr.de" %} - {% translate "startpage" %}{% endblock title %}
|
|
||||||
{% block main %}
|
|
||||||
<div class="jumbotron text-center">
|
|
||||||
<h1>404 {% translate "Not found" %}</h1>
|
|
||||||
<p>{% translate "The resource you are looking for does not exist." %}</p>
|
|
||||||
</div>
|
|
||||||
<div class="container text-center jumbotron my-5" py-5>
|
|
||||||
<h1 class="my-4">{% translate "Looking for anything specific?" %}</h1>
|
|
||||||
{% include 'main_search_form.html' %}
|
|
||||||
</div>
|
|
||||||
{% endblock main %}
|
|
|
@ -1,15 +0,0 @@
|
||||||
{% extends 'base.html' %}
|
|
||||||
{% load i18n %}
|
|
||||||
{% get_current_language as LANGUAGE_CODE %}
|
|
||||||
{% block languagecode %}{{ LANGUAGE_CODE }}{% endblock languagecode %}
|
|
||||||
{% block title %}{% translate "cscherr.de" %} - {% translate "startpage" %}{% endblock title %}
|
|
||||||
{% block main %}
|
|
||||||
<div class="jumbotron text-center">
|
|
||||||
<h1>500 {% translate "Internal Server Error" %}</h1>
|
|
||||||
<p>{% translate "Something went wrong." %}</p>
|
|
||||||
</div>
|
|
||||||
<div class="container text-center jumbotron my-5" py-5>
|
|
||||||
<h1 class="my-4">{% translate "Looking for anything specific?" %}</h1>
|
|
||||||
{% include 'main_search_form.html' %}
|
|
||||||
</div>
|
|
||||||
{% endblock main %}
|
|
|
@ -51,7 +51,7 @@
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
{% for lang_code, lang_name in languages %}
|
{% for lang_code, lang_name in languages %}
|
||||||
<li><a class="dropdown-item"
|
<li><a class="dropdown-item"
|
||||||
href="{{ request.scheme }}://{{ request.META.HTTP_HOST }}{% change_lang lang_code %}?{{ request.GET.urlencode }}">
|
href="{% change_lang lang_code %}">
|
||||||
{{ lang_name }}</a></li>
|
{{ lang_name }}</a></li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<li><hr class="dropdown-divider"></li>
|
<li><hr class="dropdown-divider"></li>
|
||||||
|
|
|
@ -2,11 +2,16 @@ from django.template import Library
|
||||||
from django.urls import resolve, reverse
|
from django.urls import resolve, reverse
|
||||||
from django.utils.translation import activate, get_language
|
from django.utils.translation import activate, get_language
|
||||||
|
|
||||||
|
import re
|
||||||
|
|
||||||
|
import logging
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
register = Library()
|
register = Library()
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag(takes_context=True)
|
@register.simple_tag(takes_context=True)
|
||||||
def change_lang(context, lang=None, *args, **kwargs):
|
def change_lang(context, lang="de", *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
Get active page's url by a specified language
|
Get active page's url by a specified language
|
||||||
Usage: {% change_lang 'en' %}
|
Usage: {% change_lang 'en' %}
|
||||||
|
@ -15,16 +20,18 @@ def change_lang(context, lang=None, *args, **kwargs):
|
||||||
https://stackoverflow.com/a/41147772
|
https://stackoverflow.com/a/41147772
|
||||||
"""
|
"""
|
||||||
|
|
||||||
path = context['request'].path
|
path = context['request'].get_raw_uri()
|
||||||
url_parts = resolve(path)
|
logger.debug(f"requestdir: {dir(context['request'])}")
|
||||||
|
|
||||||
url = path
|
url = path
|
||||||
cur_language = get_language()
|
|
||||||
try:
|
try:
|
||||||
activate(lang)
|
cur_lang: str = get_language()
|
||||||
url = reverse(url_parts.view_name, kwargs=url_parts.kwargs)
|
url = re.sub(f"/{cur_lang}/", f"/{lang}/", url)
|
||||||
finally:
|
|
||||||
activate(cur_language)
|
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"exception while building language switcher form: {e}")
|
||||||
|
logger.debug(f"this is the context: {context}")
|
||||||
|
|
||||||
|
finally:
|
||||||
|
activate(lang)
|
||||||
return "%s" % url
|
return "%s" % url
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue