You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

django_restful_translator为何无法在模板中显示模型字段翻译?

django_restful_translator切换语言后模型字段不更新的排查方案

1. 模板字段访问方式错误

django_restful_translator不会自动替换原字段的默认取值,直接调用{{ blog.title }}只会获取模型原始字段的默认语言内容。需要使用库提供的翻译获取方法,将模板中的代码替换为:

{{ blog.get_title_translated }}

部分场景也支持属性式访问(如{{ blog.title_translated }}),具体以库的官方说明为准,但get_{字段名}_translated()是通用写法。

2. 翻译文件未编译

即使drt_locale目录下的po文件已包含翻译内容,也需要编译为mo文件才能让Django读取生效。在项目根目录执行以下命令:

python manage.py compilemessages

检查drt_locale下对应语言的子目录(如bn/LC_MESSAGES)是否生成了django.mo文件。

3. 查询集未处理翻译逻辑

仅使用prefetch_related('translations')不足以让模型实例感知当前请求语言,需调用库提供的查询集方法激活翻译上下文。修改视图代码:

def blogs(request):
    posts = Post.objects.all().order_by("-created_on").prefetch_related('translations').translated()
    context = {
        "blogs": posts
    }
    return render(request, "blog/index.html", context)

确保你的Post模型继承了该库的TranslatableModel,且使用了对应的模型管理器。

4. 验证语言激活状态

如果以上步骤无效,可在视图中添加调试代码,确认当前请求的语言是否与URL前缀匹配:

from django.utils.translation import get_language

def blogs(request):
    print("当前语言:", get_language())  # 查看控制台输出是否与URL前缀一致
    posts = Post.objects.all().order_by("-created_on").prefetch_related('translations')
    context = {
        "blogs": posts
    }
    return render(request, "blog/index.html", context)

若输出语言与URL前缀不符,需检查URLconf是否用i18n_patterns包裹了带语言前缀的路由。

内容的提问来源于stack exchange,提问作者Maha Waqar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 04:42:09