如何链接到django-cms中的非翻译页面的语言主页? [英] How to link to language's homepage for untranslated page in django-cms?
问题描述
在django-cms中我有两种语言,荷兰语中的一个页面目前还没有翻译成英语。查看此页面时,language_chooser不提供英文翻译的链接(因为没有)。但是,我想将链接链接到英文翻译链接到主页(或其他英文页面,如果有意义)。现在我可以自己创建所需的模板标签,或者一些模板的诡计,但是我认为这个问题已经解决了。不幸的是,我找不到任何这样的解决方案的例子。
Within django-cms I have two languages, with one page in Dutch currently not translated into English. When viewing this page, language_chooser does not provide a link for the English translation (as there is not). However, I would like to link the link to the English translation to link to the homepage (or some other English page if it makes sense). Now I could create the needed template tag myself, or some template trickery, but I think this problem has been solved before. Sadly though, I could not find any example of such a solution.
语言选择器是这样使用的:
Language chooser is used like this:
<p><small>Choose your language: {% language_chooser %}</small></p>
此模板标签使用的默认模板( github上的源):
The default template used by this template tag (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链接到英文) :
Rendered html (note the empty href for link to English):
<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
:
Make an own template tag for page_language_url
by subclassing it's existing tag, put it in a template tag file in one of your projects apps, let's call it 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)
现在在您的语言选择器模板中:
Now in your language chooser template do:
{% 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 /
(主页英文)。
That will redirect you to /en/
(the home page in English) if the English translation for this page is not available.
这篇关于如何链接到django-cms中的非翻译页面的语言主页?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!