Django/i18n:如何在模板中转换方法结果?
我正在研究我的项目的国际化。 有一点我甚至在阅读Django文档时都不理解 我有一个传递上下文(列表)的视图 在我的模板中,我循环这个列表,并对列表中的每个元素运行一个方法 此方法返回字符串('string#1'或'string#2'取决于元素) 我想翻译(英语/法语),但我不知道如何翻译? 我应该在模型或模板中应用翻译吗 下面是一个简化的代码示例 models.pyDjango/i18n:如何在模板中转换方法结果?,django,methods,internationalization,Django,Methods,Internationalization,我正在研究我的项目的国际化。 有一点我甚至在阅读Django文档时都不理解 我有一个传递上下文(列表)的视图 在我的模板中,我循环这个列表,并对列表中的每个元素运行一个方法 此方法返回字符串('string#1'或'string#2'取决于元素) 我想翻译(英语/法语),但我不知道如何翻译? 我应该在模型或模板中应用翻译吗 下面是一个简化的代码示例 models.py class mymodel(models.Model) def mymethod(self): cond
class mymodel(models.Model)
def mymethod(self):
condition = othermodel.objects.get(pk=self.ide)
if condition == 1 :
return 'string#1' # the string I want to translate
else:
return 'string#2' # the string I want to translate
return ''
views.py
def test(request):
mylist= _(["elt#1","elt#2","elt#3","elt#4","elt#5"])
return render(request, 'myapp/test.html', {'mylist': mylist})
test.html
{% for element in mylist %}
{{ element.mymethod }}
{% endfor %}
您可以选择其中一个选项 如果要在模型中进行翻译
from django.utils.translation import ugettext_lazy as _
class mymodel(models.Model)
def mymethod(self):
condition = othermodel.objects.get(pk=self.ide)
if condition == 1 :
return _('string#1') # the string I want to translate
else:
return _('string#2') # the string I want to translate
return ''
如果要在视图中进行翻译
from django.utils.translation import ugettext as _
def test(request):
mylist= [_("elt#1"), _("elt#2"), _("elt#3"), _("elt#4"), _("elt#5")]
return render(request, 'myapp/test.html', {'mylist': mylist})
如果要在模板中进行翻译
{% load i18n %}
{% for element in mylist %}
{% trans element.mymethod %}
{% endfor %}
Jacek answer很好,如果您想使用i18n方式,另一个选项是它允许在django模型端应用转换,因此它在实现例如API、前端和数据库时很有帮助