Как сделать ссылку на домашнюю страницу языка для непереведенной страницы в django-cms? - PullRequest
4 голосов
/ 05 ноября 2011

В django-cms у меня два языка, одна страница на нидерландском языке в настоящее время не переведена на английский. При просмотре этой страницы language_chooser не предоставляет ссылку для перевода на английский язык (так как его там нет). Тем не менее, я хотел бы связать ссылку на перевод на английский, чтобы перейти на домашнюю страницу (или на другую страницу на английском, если это имеет смысл). Теперь я могу сам создать необходимый тег шаблона или какой-нибудь обман, но я думаю, что эта проблема была решена раньше. К сожалению, я не смог найти ни одного примера такого решения.

Выбор языка используется следующим образом:

<p><small>Choose your language: {% language_chooser %}</small></p>

Шаблон по умолчанию, используемый этим тегом шаблона ( source на github ):

{% load menu_tags %}
{% for language in languages %}
<a href="{% page_language_url language.0 %}"{% ifequal current_language language.0 %} class="current"{% endifequal %}>{{ language.1 }}</a>
{% endfor %}

Визуализированный html (обратите внимание на пустую ссылку для ссылки на английский):

<p><small>Choose your language: 
<a href="">English</a>
<a href="/nl/contact/" class="current">Nederlands</a>
</small></p>

1 Ответ

6 голосов
/ 14 ноября 2011

Я предлагаю следующее:

Создайте собственный шаблонный тег для 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/ (домашняя страница на английском языке), если английский перевод для этой страницы недоступен.

...