I suggest the following:
Create your own template tag for page_language_url , subclassing its existing tag, put it in the template tag file in one of your application projects, call it menu_extra_tags.py :
from django import template from menus.templatetags.menu_tags import PageLanguageUrl from classytags.arguments import Argument from classytags.core import Options register = template.Library() class PageLanguageUrlAsVariable(PageLanguageUrl): name = 'page_language_url_as_variable' options = Options( Argument('lang'), 'as', Argument('varname', resolve=False), ) def render_tag(self, context, **kwargs): varname = kwargs.pop('varname') url = super(PageLanguageUrlAsVariable, self).render_tag(context, **kwargs) context[varname] = url return '' register.tag(PageLanguageUrlAsVariable)
Now in your language selection template do:
{% load menu_tags menu_extra_tags %} {% for language in languages %} {% page_language_url_as_variable language.0 as pageurl %} <a href="{% if pageurl %}{{ pageurl }}{% else %}/{{ language.0 }}/{% endif %}"{% ifequal current_language language.0 %} class="current"{% endifequal %}>{{ language.1 }}</a> {% endfor %}
This will result in a redirect to /en/ (English homepage) if English translation is not available for this page.
source share