Я предлагаю следующее:
Создайте собственный шаблонный тег для page_language_url
, поместив в подклассы его существующий тег, поместите его в файл тега шаблона в одном из приложений вашего проекта, назовем его 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)
Теперь в вашем шаблоне выбора языка сделайте:
{% 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 %}
Это перенаправит вас на /en/
(домашняя страница на английском языке), если английский перевод для этой страницы недоступен.