Last active
January 6, 2018 15:21
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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