我有一个以下格式的对象:
{
'af': {
'bidi': False,
'code': 'af',
'name': 'Afrikaans',
'name_local': 'Afrikaans'
},
'ar': {
'bidi': True,
'code': 'ar',
'name': 'Arabic',
'name_local': 'العربيّة'
},
...
}
这是django.conf.locale.LANG_INFO
中的区域设置列表。(完整参考请参见此处:https://github.com/django/django/blob/master/django/conf/locale/init.py(。
现在,我希望在一个模型类中使用这个列表:
locale = models.CharField(max_length=5, choices=get_locale_choices(), default='en')
这样我就有了以下实用功能:
from django.conf.locale import LANG_INFO
def get_locale_choices():
return ?
现在,返回的?
,我希望采用以下格式:
[
('af', 'Afrikaans'),
('ar', 'Arabic'),
...
]
我的问题是,如何将LANG_INFO
字典转换为上述元组列表?
感觉像这样的事情已经接近了:
a_dict = {'color': 'blue', 'fruit': 'apple', 'pet': 'dog'}
d_items = a_dict.items()
d_items # Here d_items is a view of items
dict_items([('color', 'blue'), ('fruit', 'apple'), ('pet', 'dog')])
但是。。。嗯,不确定?我想从关键项中提取一个子值。。。
使用列表理解:
from django.conf.locale import LANG_INFO
def get_locale_choices():
return [(k, v['name']) for k, v in LANG_INFO.items() if 'name' in v]
... if 'name' in v
部分是必要的,以确保忽略具有'fallback'
但没有'name'
的情况(例如zh-cn
、zh-my
、zh-sg
等(。
结果:
[('af', 'Afrikaans'), ('ar', 'Arabic'), ...]
注意:django.conf.locale.LANG_INFO
似乎是Django内部的,所以你对它的使用并没有得到Django的正式批准。