Django中的ugettext和ugettext_lazy

Igo*_*uev 24 python django

你能解释一下ugettext和ugettext_lazy的主要区别吗?

当我试着

return HttpResponse(ugettext_lazy("Hello"))
Run Code Online (Sandbox Code Playgroud)

我什么都没看到,但是

return HttpResponse(ugettext("Hello"))
Run Code Online (Sandbox Code Playgroud)

工作中.

为什么?

谢谢.

Ned*_*der 40

ugettext用来加载一个字符串的解释现在. ugettext_lazy返回一个最终可以转换为字符串的对象.如果在ugettext_lazy设置正确的语言环境之前评估调用,则需要这样做.

ugettext_lazy可以在使用Unicode对象的地方使用.仔细检查您的HTML输出,它可能如下所示:

<django.utils.functional...>
Run Code Online (Sandbox Code Playgroud)

并且浏览器将其全部忽略为无法识别的标记.

在这种情况下,您不需要延迟转换,因为您正在使用该字符串.如果你真的想因某种原因继续使用ugettext_lazy,试试这个:

return HttpResponse(ugettext_lazy("Hello").encode('utf-8'))
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅文档.

  • 我认为``ugettext_lazy`在`models.py`中更有用. (3认同)
  • 那么让我看看我是否理解你的意思。当您位于方法或函数内部(例如视图)时,或者在加载设置和 co 后调用的位置时,“ugettext”非常有用。当想要翻译类属性等(如 @SergeyOrshanskiy 在定义模型或表单时建议的)在服务器启动时加载并且需要延迟加载时,“ugettext_lazy”更有用。正确的? (2认同)