0

目前我一直在学习 Django,在阅读时,我遇到了以下我不理解的代码块。

private = models.BooleanField(
        _('private'),
        default=False,
        help_text=_('theme is available ONLY for the site.'),
    )

上面的代码行包含_('private'),我无法理解它的作用。我知道_用于翻译相关的东西。为什么没有声明属性名称_("private")

我试图在网上找到答案,但一直无法。

谢谢。

4

2 回答 2

3

_('private')设置属性verbose_name

前导下划线是国际化 (i18n) 机制使用的 ugettext 函数之一的常用函数别名。

这意味着当您运行 i18n 时,如果有翻译,标签将被翻译成适当的最终用户语言。

检查这个答案:https ://stackoverflow.com/a/2964256/9361129

于 2020-11-09T13:08:51.410 回答
1

正如您在Django 的源代码中Field看到的, a (BooleanField继承)的构造函数verbose_name作为第一个位置参数。因此,您的第一个参数 ( _('private')) 将受到影响verbose_name

但是,为了使您的代码更清晰,我建议将其作为关键字参数传递:

private = models.BooleanField(
    verbose_name=_('private'),
    default=False,
    help_text=_('theme is available ONLY for the site.'),
)

使用关键字参数 forverbose_name将使您和阅读您的代码的人更清楚,特别是因为Django 文档没有给出位置参数的顺序。使用位置参数迫使读者阅读 Django 源代码以了解它是什么。

当你使用关键字参数时,你可以随意放置你的参数,所以这段代码的工作方式是一样的:

private = models.BooleanField(
    help_text=_('theme is available ONLY for the site.'),
    verbose_name=_('private'),
    default=False,
)
于 2020-11-09T13:29:51.110 回答