Support for Django up to 2.2.
[fnpdjango.git] / fnpdjango / templatetags / fnp_lang.py
1 from django.conf import settings
2
3 try:
4     from django.urls import resolve, reverse, Resolver404
5 except ImportError:
6     from django.core.urlresolvers import resolve, reverse, Resolver404
7
8 from django import template
9 from django.utils import translation
10 from ..utils.views import get_current_object
11
12 register = template.Library()
13
14
15 @register.inclusion_tag('fnpdjango/lang_switcher.html', takes_context=True)
16 def lang_switcher(context):
17     """Context-aware language switcher.
18
19     Use ..utils.views.set_current_object to provide the context.
20     """
21     request = context['request']
22     obj = get_current_object(request)
23     languages = settings.LANGUAGES
24     if hasattr(obj, 'get_available_languages'):
25         available_languages = set(obj.get_available_languages())
26         languages = [lang for lang in languages if lang[0] in available_languages]
27     return {
28         'request': request,
29         'languages': languages,
30     }
31
32
33 @register.filter
34 def get_here_url(request, lang):
35     obj = get_current_object(request, for_url=True)
36     if hasattr(obj, 'get_absolute_url'):
37         with translation.override(lang):
38             url = obj.get_absolute_url()
39     else:
40         try:
41             match = resolve(request.get_full_path())
42         except Resolver404:
43             match = resolve('/')
44         view = match.func
45         if view is None:
46             view = match.url_name
47         if lang is None:
48             lang = translation.get_language()
49         with translation.override(lang):
50             url = reverse(view, args=match.args, kwargs=match.kwargs)
51     return url
52
53