在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之正规地说一句话
Sep 28 Python
python实现对excel进行数据剔除操作实例
Dec 07 Python
Python WSGI的深入理解
Aug 01 Python
python对日志进行处理的实例代码
Oct 06 Python
Django安装配置mysql的方法步骤
Oct 15 Python
python输入整条数据分割存入数组的方法
Nov 13 Python
python面向对象入门教程之从代码复用开始(一)
Dec 11 Python
python使用插值法画出平滑曲线
Dec 15 Python
Python中的 enum 模块源码详析
Jan 09 Python
python读取ini配置文件过程示范
Dec 23 Python
python实现opencv+scoket网络实时图传
Mar 20 Python
构建高效的python requests长连接池详解
May 02 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
PHP实现的简易版图片相似度比较
2015/01/07 PHP
PHP获取远程图片并保存到本地的方法
2015/05/12 PHP
php根据一个给定范围和步进生成数组的方法
2015/06/19 PHP
PHP模板引擎Smarty内置变量调解器用法详解
2016/04/11 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
js 判断 enter 事件
2009/02/12 Javascript
javascript与webservice的通信实现代码
2010/12/25 Javascript
表头固定(利用jquery实现原理介绍)
2012/11/08 Javascript
用JS将搜索的关键字高亮显示实现代码
2013/11/08 Javascript
动态添加删除表格行的js实现代码
2014/02/28 Javascript
浅谈如何实现easyui的datebox格式化
2016/06/12 Javascript
JavaScript数组方法大全(推荐)
2016/07/05 Javascript
微信小程序 Page()函数详解
2016/10/17 Javascript
js实现可以点击收缩或张开的悬浮窗
2017/09/18 Javascript
详解用Node.js实现Restful风格webservice
2017/09/29 Javascript
浅谈Vuex的状态管理(全家桶)
2017/11/04 Javascript
Vuejs实现购物车功能
2017/11/05 Javascript
jQuery Dom元素操作技巧
2018/02/04 jQuery
京东优选小程序的实现代码示例
2020/02/25 Javascript
分享一下Python 开发者节省时间的10个方法
2015/10/02 Python
Python3使用PyQt5制作简单的画板/手写板实例
2017/10/19 Python
基于python批量处理dat文件及科学计算方法详解
2018/05/08 Python
使用Python进行QQ批量登录的实例代码
2018/06/11 Python
下载官网python并安装的步骤详解
2019/10/12 Python
python Event事件、进程池与线程池、协程解析
2019/10/25 Python
Python多重继承之菱形继承的实例详解
2020/02/12 Python
英国女士和男士时尚服装网上购物:Top Labels Online
2018/03/25 全球购物
财务主管的岗位职责
2013/12/30 职场文书
小学语文国培感言
2014/03/04 职场文书
房屋租赁协议书范本
2014/04/10 职场文书
不听老师话的万能检讨书
2014/10/04 职场文书
教师师德师风整改措施
2014/10/24 职场文书
综合素质评价个性发展自我评价
2015/03/06 职场文书
英文辞职信范文
2015/05/13 职场文书
新闻通讯稿范文
2015/07/22 职场文书
Java中常用解析工具jackson及fastjson的使用
2021/06/28 Java/Android