Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django/i18n:如何在模板中转换方法结果?_Django_Methods_Internationalization - Fatal编程技术网

Django/i18n:如何在模板中转换方法结果?

Django/i18n:如何在模板中转换方法结果?,django,methods,internationalization,Django,Methods,Internationalization,我正在研究我的项目的国际化。 有一点我甚至在阅读Django文档时都不理解 我有一个传递上下文(列表)的视图 在我的模板中,我循环这个列表,并对列表中的每个元素运行一个方法 此方法返回字符串('string#1'或'string#2'取决于元素) 我想翻译(英语/法语),但我不知道如何翻译? 我应该在模型或模板中应用翻译吗 下面是一个简化的代码示例 models.py class mymodel(models.Model) def mymethod(self): cond

我正在研究我的项目的国际化。 有一点我甚至在阅读Django文档时都不理解

我有一个传递上下文(列表)的视图

在我的模板中,我循环这个列表,并对列表中的每个元素运行一个方法 此方法返回字符串('string#1'或'string#2'取决于元素)

我想翻译(英语/法语),但我不知道如何翻译? 我应该在模型或模板中应用翻译吗

下面是一个简化的代码示例

models.py

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、前端和数据库时很有帮助