0

我正在为基于 Django 的网站使用 django-multilingual。当我__unicode__为模型定义函数以这种方式返回时:

def __unicode__(self):
        return unicode(self.title)

但是,我的默认语言是英语,并且我有一些仅以荷兰语插入的项目。当我预览完整列表时,我得到“无”作为标题。

有没有一种简单的方法可以尝试获取英文标题,然后检查任何其他语言的标题以供预览?

4

3 回答 3

0

迭代所有翻译可以很容易地完成,如下所示:

>>> translations = [getattr(obj, "name_" + lang[0].replace("-","_")) for lang in
settings.LANGUAGES]

其中obj是模型对象,而lang将代表设置文件中的元组 ('bg', 'Bulgarian')。

lang[0].replace("-","_")是必需的,以防您使用“uk-gb”之类的语言,因为这些值被放入name_uk_gb

于 2010-07-26T10:28:26.893 回答
0

好吧,假设您的模型将荷兰语版本存储在名为 的属性中dutch_title,您可以这样做。

def __unicode__(self):
  # If we've got an English title, use that
  if self.title:
    return self.title

  # Otherwise, default to the Dutch title
  return self.dutch_title

在不知道“某些项目仅以荷兰语插入”的意思的情况下,很难更有帮助地回答您的问题。

于 2010-07-26T09:49:05.687 回答
0

根据您使用的应用程序(例如 - django-multilingual),您可以使用:

<td>{{ object.name_en|escape }}</td>

(示例来自:http ://code.google.com/p/django-multilingual/source/browse/trunk/testproject/templates/articles/category_list.html )

我记得这个应用程序还有其他一些分支,它们曾经像这样改变这种行为:

Objec title is: {{object.en.name}}

如果您使用其他应用程序,您始终可以运行 manage.py shell 并使用 dir(MyModel) 或 dir(MyModel.fields) 进行测试以检查其中定义了哪些字段 :)

如果这些字段名称有魔法吸气剂,而您在 dir(...) 中看不到任何有趣的东西,您可以参考您喜欢的 l18n 应用程序的代码,看看里面发生了什么:)

于 2010-07-26T10:11:59.370 回答