在模型和公用函数中,使用ugettext_lazy()和ungettext_lazy()来标记字符串是很普遍的操作。 当你在你的代码中其它地方使用这些对象时,你应当确定你不会意外地转换它们成一个字符串,因为它们应被尽量晚地转换(以便正确的地域生效) 这需要使用几个帮助函数。
拼接字符串: string_concat()
标准Python字符串拼接(''.join([...]) ) 将不会工作在包括惰性翻译对象的列表上。 作为替代,你可以使用django.utils.translation.string_concat(), 这个函数创建了一个惰性对象,其连接起它的内容 并且 仅当结果被包括在一个字符串中时转换它们为字符串 。 例如:
from django.utils.translation import string_concat # ... name = ugettext_lazy(u'John Lennon') instrument = ugettext_lazy(u'guitar') result = string_concat([name, ': ', instrument]) System Message: ERROR/3 (<string>, line 519) Error in “cnid” directive: no content permitted. .. cnid:: 109
在这种情况下,当
System Message: WARNING/2 (<string>, line 523) Explicit markup ends without a blank line; unexpected unindent.
result 自己被用与一个字符串时, result 中的惰性翻译将仅被转换为字符串(通常在模板渲染时间)。
allow_lazy() 修饰符
Django提供很多功能函数(如:取一个字符串作为他们的第一个参数并且对那个字符串做些什么)。(尤其在 django.utils 中) 这些函数被模板过滤器像在其他代码中一样直接使用。
如果你写你自己的类似函数并且与翻译打交道,当第一个参数是惰性翻译对象时,你会面临“做什么”的难题。 因为你可能在视图之外使用这个函数(并且因此当前线程的本地设置将会不正确),所以你不想立即转换其为一个字符串。
象这种情况,请使用 django.utils.functional.allow_lazy() 修饰符。 它修改这个函数以便 假如第一个参数是一个惰性翻译, 这个函数的赋值会被延后直到它需要被转化为一个字符串为止。
例如:
from django.utils.functional import allow_lazy def fancy_utility_function(s, ...): # Do some conversion on string 's' # ... fancy_utility_function = allow_lazy(fancy_utility_function, unicode)
allow_lazy() 装饰符 采用了另外的函数来装饰,以及一定量的,原始函数可以返回的特定类型的额外参数 (*args ) 。 通常,在这里包括 unicode 就足够了并且确定你的函数将仅返回Unicode字符串。
使用这个修饰符意味着你能写你的函数并且假设输入是合适的字符串,然后在末尾添加对惰性翻译对象的支持。
本文向大家介绍Django中的“惰性翻译”方法的相关使用,包括了Django中的“惰性翻译”方法的相关使用的使用技巧和注意事项,需要的朋友参考一下 使用 django.utils.translation.gettext_lazy() 函数,使得其中的值只有在访问时才会被翻译,而不是在 gettext_lazy() 被调用时翻译。 例如:要翻译一个模型的 help_text,按以下进行: 在这个例子
问题内容: 我正在尝试为我的一个模型编写函数,以便可以通过执行以下操作创建对象: 当我编写模型时,我有: 这样可以正常工作,我可以将对象保存到数据库中,但是当我这样做时,除非我拿出函数,否则它不会拉任何东西。有任何想法吗? 问题答案: 依靠Django的内置功能并传递命名参数将是最简单的方法。 但是,如果您打算保存一些击键,建议您向类添加一个静态便捷方法,而不要弄乱初始化程序。
问题内容: hibernate中的property标签的lazy属性允许按照以下链接延迟加载属性:http : //docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/mapping.html#mapping- declaration -属性 lazy(可选-默认为false):指定在首次访问实例变量时应延迟获取此属性。它需要构建时字节码检测
问题内容: 我正在使用{%trans%}模板标签。Django文档说: {%trans%}模板标记可转换常量字符串(用单引号或双引号引起来)或可变内容: {%trans“这是标题。” %} {%trans myvar%} https://docs.djangoproject.com/zh-CN/1.3/topics/i18n/internationalization/#trans-template
我正在做一个项目,我需要使用几个DateTime字段,我已经在我的模型中定义了,然后在模板中,我正在使用https://tempusdominus.github.io/bootstrap-4/插件,但是当我提交表单时,有两个问题来吧: 1) :Django说为所有DateTime字段输入有效的日期/时间(2):选择有效选项<代码>[“玉米油”]不是可用选项之一。 以下是我尝试过的: 从: 从: 从
本文向大家介绍使用Django的模版来配合字符串翻译工作,包括了使用Django的模版来配合字符串翻译工作的使用技巧和注意事项,需要的朋友参考一下 Django模板使用两种模板标签,且语法格式与Python代码有些许不同。 为了使得模板访问到标签,需要将 {% load i18n %} 放在模板最前面。 这个{% trans %}模板标记翻译一个常量字符串 (括以单或双引号) 或 可变内容: 如果