Skip to content

Instantly share code, notes, and snippets.

@fdemmer
Last active January 6, 2018 15:21
Show Gist options
  • Save fdemmer/cd7695d88f1e32e6b74487c5ca1e332b to your computer and use it in GitHub Desktop.
Save fdemmer/cd7695d88f1e32e6b74487c5ca1e332b to your computer and use it in GitHub Desktop.
a django template tag to switch/link the current django or wagtail view/url to another language
# example usage:
#
# {% if request.LANGUAGE_CODE == 'de' %}
# <a href="{% switch_language 'en' %}">English</a>
# {% else %}
# <a href="{% switch_language 'de' %}">Deutsch</a>
# {% endif %}
#
@register.simple_tag(takes_context=True)
def switch_language(context, requested_language=None, *args, **kwargs):
"""
Get current page's url in requested language
Usage: {% switch_language 'en' %}
"""
request = context['request']
if request.resolver_match:
# handle wagtail pages
if request.resolver_match.url_name == 'wagtail_serve':
with translation.override(requested_language):
current_page = context.get('page')
url = current_page.relative_url(request.site)
# handle django views
else:
url_parts = resolve(request.path)
with translation.override(requested_language):
url = reverse(url_parts.view_name, kwargs=url_parts.kwargs)
return force_text(url)
return ''
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment