【问题标题】:Django model field contain strange attribute _("private")Django 模型字段包含奇怪的属性 _("private")
【发布时间】:2020-11-09 12:57:47
【问题描述】:

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

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

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

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

谢谢。

【问题讨论】:

  • 这是我没有遇到过的。您是否尝试过运行这段代码并查看结果?
  • 你在使用django-translated-fields吗?为什么你认为这与django-translated-fields有关?

标签: python django django-models django-translated-fields


【解决方案1】:

_('private') 设置属性verbose_name

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

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

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

【讨论】:

  • 他已经了解了 unscore 用于翻译的用法。当作为位置参数传递给BooleanField 时,他只是不明白该值设置的是哪个属性。
  • 这是verbose_name
  • 很高兴知道!现在我学到了一些新东西。您应该更新您的答案,以便它回答 OP 的问题。
  • 我也建议添加django documentation链接
【解决方案2】:

正如您在source code of Django 中所见,FieldBooleanField 继承)的构造函数将verbose_name 作为第一个位置参数。因此,您的第一个参数 (_('private')) 将影响到 verbose_name

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

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

verbose_name 使用关键字参数将使您和阅读您的代码的人更清楚,尤其是在Django documentation does not give the order of positional arguments 之后。使用位置参数迫使读者阅读 Django 源代码以了解它是什么。

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

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

【讨论】:

    猜你喜欢
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 2016-10-12
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多