在Django的模型和公用函数中使用惰性翻译对象


Posted in Python onJuly 27, 2015

在模型和公用函数中,使用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字符串。

使用这个修饰符意味着你能写你的函数并且假设输入是合适的字符串,然后在末尾添加对惰性翻译对象的支持。

Python 相关文章推荐
使用Python判断IP地址合法性的方法实例
Mar 13 Python
Python实现抓取百度搜索结果页的网站标题信息
Jan 22 Python
Python实现判断给定列表是否有重复元素的方法
Apr 11 Python
Python3.5 创建文件的简单实例
Apr 26 Python
python+unittest+requests实现接口自动化的方法
Nov 29 Python
python单线程下实现多个socket并发过程详解
Jul 27 Python
基于 Django 的手机管理系统实现过程详解
Aug 16 Python
Python OrderedDict的使用案例解析
Oct 25 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
Nov 29 Python
pyenv虚拟环境管理python多版本和软件库的方法
Dec 26 Python
Pytorch释放显存占用方式
Jan 13 Python
pytorch中的numel函数用法说明
May 13 Python
使用Django的模版来配合字符串翻译工作
Jul 27 #Python
Django中的“惰性翻译”方法的相关使用
Jul 27 #Python
在Python中的Django框架中进行字符串翻译
Jul 27 #Python
Python中特殊函数集锦
Jul 27 #Python
Python实现截屏的函数
Jul 26 #Python
Python计算已经过去多少个周末的方法
Jul 25 #Python
Python基于动态规划算法计算单词距离
Jul 25 #Python
You might like
PHP4之COOKIE支持详解
2006/10/09 PHP
php记录代码执行时间(实现代码)
2013/07/05 PHP
基于thinkphp6.0的success、error实现方法
2019/11/05 PHP
js 链式延迟执行DOME
2012/01/04 Javascript
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
2012/02/03 Javascript
JS/FLASH实现复制代码到剪贴板(兼容所有浏览器)
2013/05/27 Javascript
解析Jquery中如何把一段html代码动态写入到DIV中(实例说明)
2013/07/09 Javascript
减少访问DOM的次数提升javascript性能
2014/02/24 Javascript
JQuery中serialize()用法实例分析
2015/02/06 Javascript
Jquery判断radio、selelct、checkbox是否选中及获取选中值方法总结
2015/04/15 Javascript
谈谈第三方App接入微信登录 解读
2016/12/27 Javascript
JavaScript中BOM对象原理与用法分析
2019/07/09 Javascript
细说webpack6 Babel的使用详解
2019/09/26 Javascript
vue实现侧边栏导航效果
2019/10/21 Javascript
package.json中homepage属性的作用详解
2020/03/11 Javascript
[41:54]2018DOTA2亚洲邀请赛 4.1 小组赛A组加赛 TNC vs Liquid
2018/04/03 DOTA
python的tkinter布局之简单的聊天窗口实现方法
2014/09/03 Python
在Python中使用HTML模版的教程
2015/04/29 Python
使用Python读写文本文件及编写简单的文本编辑器
2016/03/11 Python
python 通过logging写入日志到文件和控制台的实例
2018/04/28 Python
python flask实现分页的示例代码
2018/08/02 Python
pandas read_excel()和to_excel()函数解析
2019/09/19 Python
python实现文件+参数发送request的实例代码
2021/01/05 Python
详解CSS3中字体平滑处理和抗锯齿渲染
2017/03/29 HTML / CSS
GUESS德国官网:美国牛仔服装品牌
2017/02/14 全球购物
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
求职自荐信怎么写
2014/03/06 职场文书
初中班主任寄语
2014/04/04 职场文书
英语三分钟演讲稿
2014/08/19 职场文书
小学生思想品德评语
2014/12/31 职场文书
初中军训感想
2015/08/07 职场文书
防溺水安全教育主题班会
2015/08/12 职场文书
2016党校培训心得体会
2016/01/07 职场文书
2016银行招聘自荐信
2016/01/28 职场文书
Python数据可视化之绘制柱状图和条形图
2021/05/25 Python
Pytorch中expand()的使用(扩展某个维度)
2022/07/15 Python