python - DJANGO 翻译 - 使用 django-datatrans 翻译包括 "slugs"在内的模型

标签 python django url-routing multilingual

我正在审查 django-datatrans 以与 django-localeurl 并行使用。

我想要做的是翻译 slugs,以便按如下方式访问我的翻译对象:

  • www.mysite.com/fr/bonjour(法语)
  • www.mysite.com/en/hello(英文)

为此,我需要“get”依赖于“当前语言”。

用一个例子来澄清:

如果我这样做: 对象 = MyObject.objects.get(slug=slug_from_url)

然后“get”应该在以下情况下找到该对象:

  • current_language 是 FR 并且 slug_from_url == bonjour
  • current_language 为 EN,slug_from_url == hello

我无法实现此行为,相反,“get”仅适用于默认语言中的“slug_from_url”...无论执行期间“当前语言”是什么。

也许我的处理方式是错误的,所以欢迎任何解决方案! 提前致谢

最佳答案

这种情况下最简单的解决方案是查询 KeyValue 模型

from datatrans.models import KeyValue
from datatrans.utils import get_current_language, get_default_language

digest = KeyValue.objects.get(value=slug_from_url, language=get_current_language()).digest
value = KeyValue.objects.get(digest=digest, language=get_default_language()).value

# value now contains 'hello'
myobject = MyObject.objects.get(slug=value)

此代码本质上是将您的字符串翻译回其原始语言,以便您可以执行查找。我知道这些是额外的查询,但如果您有一些缓存,这根本不会影响您的性能。

您可以将其放入某些实用函数中以获得更好的可重用性。

顺便说一句,Datatrans 仅设计用于翻译模型的可显示内容,而不是查找字段,因为这将是对 Django QuerySet API 的一个非常巨大的改变。

希望这有帮助...

关于python - DJANGO 翻译 - 使用 django-datatrans 翻译包括 "slugs"在内的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5368822/

相关文章:

django - 要求某些字段不能全部留空。至少需要一个

javascript - ng-view 或 Controller 不工作

javascript - AngularJS 路由重命名

python - 将新文本数据添加到 Azure 中的现有 Blob

python - 为什么我的程序第一行是#-*- coding : cp1252 -*-?

python-3.x - 如何告诉 Django 模型只有一个或其他字段必须不为空?

python - Django Channels 或 Tornado 用于基于套接字的连接

javascript - Meteor router for multiple layouts 为家庭使用不同的布局

Python + flask : Correct way to validate that json POST request is non-empty

python - sklearn中StratifiedKFold和StratifiedShuffleSplit的区别