在身份验证表单中查看一些Django代码,我注意到以下语法
label=_("Username")
Run Code Online (Sandbox Code Playgroud)
通常我会在字符串周围使用一对引号.有人可以向我展示"用户名"周围的下划线和括号吗?
Max*_*ant 35
它_是可调用的(函数,可调用对象)的名称.它通常用于gettext函数,例如在Django中:
from django.utils.translation import ugettext as _
print _("Hello!") # Will print Hello! if the current language is English
# "Bonjour !" in French
# ¡Holà! in Spanish, etc.
Run Code Online (Sandbox Code Playgroud)
正如文件所说:
Python的标准库gettext模块
_()作为别名安装到全局命名空间中gettext().在Django,我们选择不遵循这种做法,原因有两个:[...]
下划线字符(
_)用于表示Python的交互式shell和doctest测试中的"先前结果".安装全局_()功能会导致干扰.明确导入ugettext()的_()避免了这个问题.
即使它是一种约定,但在您的代码中可能并非如此.但要放心,99.9%的时间_是别名gettext:)
Mar*_*ers 10
下划线只是另一个Python对象,但按照惯例,gettext库会扫描它以查找可翻译文本.
通常它绑定到ugettextcallable:
from django.utils.translation import ugettext as _
Run Code Online (Sandbox Code Playgroud)
请参阅Django文档的翻译章节:
Python的标准库gettext模块
_()作为别名安装到全局命名空间中gettext().在Django,我们选择不遵循这种做法,原因有两个:
- 对于国际字符集(Unicode)支持,
ugettext()比更有用gettext().有时,您应该将其ugettext_lazy()用作特定文件的默认转换方法.如果没有_()全局命名空间,开发人员必须考虑哪个是最合适的翻译功能.- 下划线字符(
_)用于表示Python的交互式shell和doctest测试中的"先前结果".安装全局_()功能会导致干扰.明确导入ugettext()的_()避免了这个问题.