在我的模型中,我有两个标题字段,一个用于语言。我希望用其他语言将用户语言中的标题命名为其他语言。
我的model.py
:
class Post(models.Model):
title_it = Model.CharField(_('title'), max_length=64, blank=True)
title_en = Model.CharField(_('title'), max_length=64, blank=True)
def __str__(self):
name_traslated={'title_it': self.title_it, 'title_en': self.title_en}
name_verbose=_('title_it')
name=name_traslated[name_verbose]
if name=='':
name=name_traslated['title_it']
if name=='':
name=name_traslated['title_en']
if name=='':
name=ugettext('No Title')
有一些更快的方法吗?例如:
def __str__(self):
name_traslated={'title_it': self.title_it, 'title_en': self.title_en}
name_verbose=_('title_it')
name=self.title_it
if name_traslated[name_verbose]: #!=''
name=name_traslated[name_verbose]
elif name==''
name=ugettext('No Title')
return name
答案 0 :(得分:0)
您可以使用三元操作的python版本来缩短子句。
class Post:
title_it = 'ciao mondo'
title_en = 'hello world'
def __str__(self):
name_translated = {'title_it': self.title_it, 'title_en': self.title_en}
name_verbose = 'title_it'
out = name_translated[name_verbose] if name_translated[name_verbose] else name_translated['title_en']
return out if out else 'No Title'
答案 1 :(得分:0)
根据您的使用频率和所需的更多语言扩展程序,您可能希望维护首选项列表。在上面的三方案例中,我将其概括为:
pref_list = [
name,
name_translated[user_language],
name_translated[default_language]
]
现在,您只需拔出第一个包含文本的文本。您可以通过检查字符串内容或长度来完成此操作。如果您愿意,整个操作可以包含在一个表达式中。