Browse Source

switch_language_url.

master 0.2.19
Erik Stein 6 years ago
parent
commit
7936e37ffd
  1. 3
      CHANGES
  2. 27
      shared/utils/templatetags/translation_tags.py

3
CHANGES

@ -1,3 +1,6 @@
0.2.19 2019-01-31
- Added switch_language_url template tag.
0.2.18 2019-01-28
- Added dispatch_slug_path.
- Added AdminActionBase, TargetActionBase.

27
shared/utils/templatetags/translation_tags.py

@ -1,8 +1,8 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
# Erik Stein <code@classlibrary.net>, 2014-2015
from django import template
from django.urls.exceptions import NoReverseMatch
from django.urls import reverse
from django.utils.six.moves.urllib.parse import urlsplit, urlunsplit
from django.utils.translation import override
from ..translation import get_translation, get_translated_field
@ -10,6 +10,25 @@ from ..translation import get_translation, get_translated_field
register = template.Library()
@register.simple_tag(takes_context=True)
def switch_language_url(context, lang_code: str):
request = context['request']
match = request.resolver_match
parsed_url = urlsplit(request.get_full_path())
to_be_reversed = "%s:%s" % (match.namespace, match.url_name) \
if match.namespace else match.url_name
with override(lang_code):
try:
url = reverse(to_be_reversed, args=match.args, kwargs=match.kwargs)
except NoReverseMatch:
pass
else:
url = urlunsplit((parsed_url.scheme, parsed_url.netloc,
url, parsed_url.query, parsed_url.fragment))
return url
@register.filter
def translation(obj):
return get_translation(obj)

Loading…
Cancel
Save