django - 如何链接到 django-cms 中未翻译页面的语言主页?

标签 django internationalization django-cms

在 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>

最佳答案

我建议如下:

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/ (英文主页)如果此页面的英文翻译不可用。

关于django - 如何链接到 django-cms 中未翻译页面的语言主页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8016169/

相关文章:

django - 在 Django 模板中访问 RequestContext?

django - 如何在 Django 中指定模板加载的顺序?

java - 应用程序扩展 Neo4jConfiguration 时无法使用 InterceptorRegistry

django - 将 django-cms 升级到 3.1.2 并将 django 升级到 1.8.3

python - 如何测试打包为可重用应用程序的 Django-CMS 插件

python - 用于Elasticsearch的Django CMS绝对URL

django - 与 F 表达式的时间差 : error

python - Django模型: sum in def

spring本地敏感数据

javascript - 为什么 String#localeCompare 在 H 和 I 之间放置 "ʻ"(`Okina)?