gpt4 book ai didi

python - Django 多语言网站

转载 作者:太空宇宙 更新时间:2023-11-03 21:27:53 25 4
gpt4 key购买 nike

我正在尝试创建一个多语言网站,它将根据所选语言从数据库获取内容。为此,我使用 i18n_patterns,因此我可以在 View 中使用 get_language() 轻松获取所选语言。

现在,我的模型看起来像这样(简化):

class Article(models.Model):
author = models.CharField("Author", max_length=255)

class ArticleText(models.Model):
id = models.OneToOneField(Article, on_delete=models.CASCADE, primary_key=True)
en = models.TextField("English")
fr = models.TextField("French")

我的想法(基于 SO 的研究)是我将文章的文本内容存储在其他地方,将其主键链接到实际的 Article 对象的主键。

Article 模型仅包含一般信息(发布日期、作者等),这对于所有语言都是相同的。但是,我不太确定如何从我的模板访问数据。现在我使用:

context["articles"] = models.Content.objects.select_related("id")

然后我可以使用访问模板中的各个字段

{% for article in articles %}
<h3>{{ article.author }} - {{ article.fr }}</h3>
{% endfor %}

但是,我希望语言 ({{article.$LANGUAGE }}) 根据所选语言进行更改。类似的东西

{{ article.$get_current_language }}  --> {{ article.fr }}

我想我可以在模板中执行以下操作:

{% if get_current_language == en %}
{{ article.en }}
{% elif get_current_language == fr %}
{{ article.fr }}
{% endif %}

但我认为在模板中执行此操作很丑陋 - 我宁愿在 View 中执行此操作并将其传递到模板中。不幸的是,我不知道如何以正确的语言传递所有文章对象及其相关文本,以及如何通过它们进行 for 循环。

我是否想得太多了?我应该在模板中使用 if block 吗?还是有更好的方法来做到这一点?

最佳答案

这似乎是编写自定义模板过滤器的一个很好的用例,它将返回给定当前语言的适当的文章版本。

有关如何编写自定义过滤器的详细代码说明,请参阅 Django 文档:Writing custom template tags and filters

这里有一个代码示例可以帮助您入门:

from django import template
from django.template.defaultfilters import stringfilter

register = template.Library()

@register.filter
def localize(value, arg):
"""Returns appropriate language version
of the given article.

value: the article
arg: the current language code
"""

article = value
lang = arg

try:
# `getattr` will call `article.en` or `article.fr`
# depending on the value of `lang`
text = getattr(article, lang)
except AttributeError:
# if this code runs, this means that
# the `article` doesn't have a version
# for the given `lang`

# so, return a default version
text = article.en

return text

现在,您需要在应用程序中创建一个名为 templatetags 的目录,并在该目录中创建一个文件,并将此代码放入该文件中。详细说明可参见Code layout文档部分。

<小时/>

当您阅读了有关在何处放置上述代码的文档后,您可以通过以下方式使用此过滤器:

{% get_current_language as LANG %}

{{ article|localize:LANG }}

关于python - Django 多语言网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53732644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com