django - 带有 django 翻译字段的多语言 slug
问题描述
我正在尝试在django-translated-fields的帮助下实现多语言 Django 网站。
我正在进行的项目基于cookiecutter-django和 Docker。
翻译适用于我的模型字段 - 除了 slug 字段。实际上,slug 的翻译也可以,但我无法使用 slug 字段来获得一个条目。
投票模型摘录:
class Voting(models.Model):
slug = TranslatedField(
models.SlugField(
max_length=80,
unique=True,
verbose_name="Voting URL slug",
blank=True
),
{
"de": {"blank": True},
"fr": {"blank": True},
"it": {"blank": True},
"rm": {"blank": True},
"en": {"blank": True},
},
)
项目的完整投票模型可以在这里看到。
观点摘录:
def voting(request, slug):
voting = get_object_or_404(Voting, slug=slug)
context = {
'voting': voting
}
return render(request, 'votes/single.html', context)
完整视图可以在这里看到
由于 Django 翻译的字段创建slug_en
,slug_de
等等,我找不到以相应语言获取 slug 的解决方案。
这应该很明显,因为 Django 翻译字段的文档说:
实际上没有创建模型字段。TranslatedField 实例是一个描述符,默认情况下充当当前语言字段的属性。
不幸的是,无论如何都没有得到它。知道如何更改投票模型以获取特定语言的条目吗?
解决方案
from translated_fields import to_attribute
def voting(request, slug):
voting = get_object_or_404(Voting, **{to_attribute(name='slug'): slug})
context = {
'voting': voting
}
return render(request, 'votes/single.html', context)
如有必要,您可以添加language_code=request.LANGUAGE_CODE
对 的调用to_attribute
,但通常这不是必需的:
voting = get_object_or_404(Voting, **{to_attribute(name='slug', language_code=request.LANGUAGE_CODE): slug})
推荐阅读
- email - GitHub:停用一个存储库的通知
- mongodb - MongoDB 副本集节点从主节点变为辅助节点
- scala - 运行测试时模拟匹配器出现问题
- jmeter - Jmeter-如何将大文件从 S3 存储桶复制到同一个 s3 中的另一个存储桶
- sql - 检查数组的交集
- reactjs - 只允许某个域访问我的 Django 后端
- javascript - 如何在html中的单词和字母之间留出空格?
- javascript - 如何根据选择打开嵌套的选项卡行?
- python - python “unicodescape 错误”当我尝试用字符串添加数字时
- javascript - 将 Firebase 存储中的文件保存为 .pdf?