我正在审查 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/