4

django-cmsには、2つの言語があり、オランダ語の1ページは現在英語に翻訳されていません。このページを表示するとき、language_chooserは英語の翻訳へのリンクを提供しません(ないため)。ただし、ホームページ(または意味がある場合は他の英語のページ)にリンクするために、英語の翻訳へのリンクをリンクしたいと思います。これで、必要なテンプレートタグを自分で作成したり、テンプレートのトリックを作成したりできますが、この問題は以前に解決されたと思います。残念ながら、そのような解決策の例は見つかりませんでした。

言語チューザーは次のように使用されます。

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

このテンプレートタグで使用されるデフォルトのテンプレート(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(英語へのリンクについては空のhrefに注意してください):

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

1 に答える 1

6

私は次のことを提案します:

既存のタグをサブクラス化して独自のテンプレートタグを作成page_language_urlし、プロジェクトアプリの1つにあるテンプレートタグファイルに入れて、次のように呼び出します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/このページの英語訳が利用できない場合は、(英語のホームページ)にリダイレクトされます。

于 2011-11-14T15:39:57.177 に答える