在django-cms中我有两种语言,其中一页荷兰语目前没有翻译成英文。查看此页面时,language_chooser不提供英文翻译的链接(因为没有)。但是,我想链接到英文翻译链接到主页(或其他一些英文页面,如果有意义的话)。现在我可以自己创建所需的模板标签,或者一些模板技巧,但我认为这个问题之前已经解决了。可悲的是,我找不到任何这种解决方案的例子。
语言选择器的使用方式如下:
<p><small>Choose your language: {% language_chooser %}</small></p>
此模板标记(source on 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>
答案 0 :(得分:6)
我建议如下:
为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/
(英文主页)。