关于Django模型字段中_('private')参数及未指定属性名的疑问
解答你的Django代码疑问
Hey there! Let me break down that confusing line of Django model code for you step by step:
1. 关于_('private')的作用
首先,_是Django里gettext()函数的常用快捷别名,专门用来做国际化翻译(i18n)。这里的_('private')有两个核心作用:
- 它给这个
BooleanField设置了一个人性化的显示名称(verbose name)——在Django后台管理界面、自动生成的表单里,这个字段会显示为"private",比直接用字段名显示更友好(如果字段名是is_private这类更技术化的命名,这个显示名的优势会更明显)。 - 同时,它让这个显示名称支持多语言翻译:只要你配置了对应语言的翻译文件,这个字段名会自动切换成目标语言的文本,方便搭建多语言网站。
2. 为什么没有显式写属性名
这是Django模型字段的一个实用语法糖:BooleanField(以及大部分Django模型字段)的第一个位置参数就是verbose_name,所以你不需要显式写出verbose_name=_('private'),直接传值就相当于给这个参数赋值了。
举个等价的写法你就懂了,下面这段代码和你看到的完全一样:
private = models.BooleanField( verbose_name=_('private'), default=False, help_text=_('theme is available ONLY for the site.'), )
只是省略了verbose_name=这个参数名而已,Django会自动把第一个位置参数识别为verbose_name。
额外小补充
你看到的help_text=_('theme is available ONLY for the site.')也是同理,_()包裹的文本同样支持翻译,而help_text是显式写了参数名的,因为它不是第一个参数啦。
内容的提问来源于stack exchange,提问作者Moon
相关产品推荐
相关产品推荐

