我正在为基于 Django 的网站使用 django-multilingual。当我__unicode__
为模型定义函数以这种方式返回时:
def __unicode__(self):
return unicode(self.title)
但是,我的默认语言是英语,并且我有一些仅以荷兰语插入的项目。当我预览完整列表时,我得到“无”作为标题。
有没有一种简单的方法可以尝试获取英文标题,然后检查任何其他语言的标题以供预览?
我正在为基于 Django 的网站使用 django-multilingual。当我__unicode__
为模型定义函数以这种方式返回时:
def __unicode__(self):
return unicode(self.title)
但是,我的默认语言是英语,并且我有一些仅以荷兰语插入的项目。当我预览完整列表时,我得到“无”作为标题。
有没有一种简单的方法可以尝试获取英文标题,然后检查任何其他语言的标题以供预览?
迭代所有翻译可以很容易地完成,如下所示:
>>> translations = [getattr(obj, "name_" + lang[0].replace("-","_")) for lang in
settings.LANGUAGES]
其中obj是模型对象,而lang将代表设置文件中的元组 ('bg', 'Bulgarian')。
lang[0].replace("-","_")是必需的,以防您使用“uk-gb”之类的语言,因为这些值被放入name_uk_gb
好吧,假设您的模型将荷兰语版本存储在名为 的属性中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
在不知道“某些项目仅以荷兰语插入”的意思的情况下,很难更有帮助地回答您的问题。
根据您使用的应用程序(例如 - 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 应用程序的代码,看看里面发生了什么:)