python - 如何根据 Django CMS 中的区域动态更改 header 中的链接标签

标签 python django django-templates django-views django-cms

我正在寻找一种使用 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/

相关文章:

python gRPC 错误 : "error": "13 INTERNAL: Failed to serialize response!" when trying to return a repeated message instead of stream in a List Request

python - Django 模板是否实现了逻辑表达式的短路?

python - 在 tensorflow 中运行 Iterator.get_next() 后如何获取前一批?

python - 错误 : [Errno 11004] getaddrinfo failed

python - 设计 : Code after "if __name__ == __main__" test

django - 如何创建一个 BytesIO img 并传递给模板

Django和crispy form,如何在crispy Layout中添加id和name

python - 在每个页面上搜索输入。 Django

python - 如何从 django 模型 DateTimeField 获取本地日期时间?

html - 多列下拉菜单内联 block 不起作用