我正在寻找一种使用 hreflang 更改链接标签的方法,具体取决于网站上使用的区域或语言。例如:
我有一个用英语编写的博客网站,我希望在该网站上拥有:
<link rel="alternate" hreflang="en" href="https://example.com" />
<link rel="alternate" hreflang="de" href="https://example.com/de" />
对于德语版本:
<link rel="alternate" hreflang="de" href="https://example.com/de" />
<link rel="alternate" hreflang="en" href="https://example.com" />
我可以用这样的语句来做到这一点:
{% if request.build_absolute_uri == "https://example.com" %}
{% if request.build_absolute_uri == "https://example.com/de" %}
但是如果我有比这两条路径更多的路径并且我的 if 语句会增长怎么办?有更好的解决办法吗?
最佳答案
这个答案的灵感来自django cms language_chooser模板标签。
你自己写context processor像这样:
from cms.utils.i18n import (
get_language_list
get_language_object,
get_public_languages
)
from django.contrib.sites.models import Site
from django.utils.translation import get_language
def language_list_processor(request):
"""
A context processor that adds the available languages to the global context.
"""
context = {}
site = Site.objects.get_current()
if request.user.is_staff:
languages = get_language_list(site_id=site.pk)
else:
languages = get_public_languages(site_id=site.pk)
language_info = []
for language in languages:
obj = get_language_object(language, site_id=site.pk)
languages_info.append({"code": obj['code'], "name": obj['name']})
context['languages'] = languages_info
context['current_language'] = get_language()
return context
有了这个上下文处理器,您将能够访问模板中的这些上下文变量并循环它们以使用相应的 hreflang
创建链接标记。
关于python - 如何根据 Django CMS 中的区域动态更改 header 中的链接标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59167722/