【问题标题】:Why do I get NameError: name '_' is not defined when setting custom templates for djangocms-video?为什么在为 djangocms-video 设置自定义模板时出现 NameError: name '_' is not defined?
【发布时间】:2022-01-04 20:59:40
【问题描述】:

我正在尝试让自定义模板适用于 djangocms-video。

到目前为止,有一个新的 djangocms 项目设置了一些引导程序并且运行良好。

根据readme,我们需要在 settings.py 中指定这一点以使自定义模板可用(在本例中为名为“feature”的模板):

DJANGOCMS_VIDEO_TEMPLATES = [
    ('feature', _('Featured Version')),
]

设置这个并运行manage.py后出现这个错误:

    ('feature', _('Featured Version')),
NameError: name '_' is not defined

According to other threads 我们需要在 modely.py 中像这样导入 gettext: from django.utils.translation import gettext as _ 或像这样: django.utils.translation import ugettext_lazy as _

到目前为止没有运气。我在这里错过了什么?

这里有一些关于环境的信息:

python --version
Python 3.9.2
pip list
Package                    Version
-------------------------- -----------
asgiref                    3.4.1
cssselect2                 0.4.1
dj-database-url            0.5.0
Django                     3.1.14
django-classy-tags         2.0.0
django-cms                 3.8.0
django-filer               2.1.2
django-formtools           2.3
django-js-asset            1.2.2
django-mptt                0.13.4
django-polymorphic         3.0.0
django-sekizai             2.0.0
django-treebeard           4.5.1
djangocms-admin-style      2.0.2
djangocms-attributes-field 2.0.0
djangocms-bootstrap4       2.0.0
djangocms-file             3.0.0
djangocms-googlemap        2.0.0
djangocms-icon             2.0.0
djangocms-installer        2.0.0
djangocms-link             3.0.0
djangocms-picture          3.0.0
djangocms-style            3.0.0
djangocms-text-ckeditor    4.0.0
djangocms-video            3.0.0
easy-thumbnails            2.8
html5lib                   1.1
lxml                       4.7.1
Pillow                     9.0.0
pip                        21.3.1
pkg_resources              0.0.0
pytz                       2021.3
pytz-deprecation-shim      0.1.0.post0
reportlab                  3.6.5
setuptools                 44.1.1
six                        1.16.0
sqlparse                   0.4.2
svglib                     1.1.0
tinycss2                   1.1.1
tzdata                     2021.5
tzlocal                    4.1
Unidecode                  1.1.2
webencodings               0.5.1

【问题讨论】:

    标签: python django django-templates django-cms python-3.9


    【解决方案1】:

    在 Django 中,gettext_lazy(…) function [Django-doc] 通常被导入为_ 来管理翻译。这在Standard translation中有解释:

    Python 的标准库gettext 模块将_() 作为gettext() 的别名安装到全局命名空间中。在 Django 中,我们选择不遵循这种做法,原因有几个

    (…)

    由于 xgettext(由 makemessages 使用)的工作原理,只有采用单个字符串参数的函数才能导入为 _

    因此您应该添加:

    from django.utils.translation <strong>import gettext_lazy as _</strong>

    在文件的顶部。

    如果您因此定义_('Featured Version') 之类的内容,则可以运行makemessages 来生成翻译文件并填写每种语言的翻译。

    【讨论】:

    • 谢谢@willem-van-onsem,djangocms-video 项目的 models.py 已经定义了,你可以在代码的第 12 行找到它:github.com/django-cms/djangocms-video/blob/master/… 这正是我的原因我在这里挠头……
    • @4L3XK: 但你也需要在settings.py 中导入它。每次在文件中使用它时,都需要将其导入该文件中。它不会在某种“全局”范围内导入它。
    猜你喜欢
    • 2015-01-20
    • 1970-01-01
    • 2021-10-10
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-02
    • 2020-04-22
    相关资源
    最近更新 更多