How to link to the main language page for an untranslated page in django-cms?

Inside django-cms, I have two languages, one of which in Dutch is not translated into English. When viewing this page language_chooser does not provide a link for translation into English (since it does not exist). However, I would like to link the link with an English translation to link to the home page (or to another page in English, if that makes sense). Now I could create the necessary template tag myself or some kind of template deception, but I think this problem was solved earlier. Unfortunately, I could not find any example of such a solution.

The language selection is used as follows:

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

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 %} 

Rendered html (note the empty href for the English link):

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

I suggest the following:

Create your own template tag for page_language_url , subclassing its existing tag, put it in the template tag file in one of your application projects, 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 selection 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 %} 

This will result in a redirect to /en/ (English homepage) if English translation is not available for this page.

+5
source

Source: https://habr.com/ru/post/1379720/


All Articles