在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中的CURL PycURL使用例子
Jun 01 Python
python常规方法实现数组的全排列
Mar 17 Python
详解Python2.x中对Unicode编码的使用
Apr 03 Python
python中星号变量的几种特殊用法
Sep 07 Python
用python写一个windows下的定时关机脚本(推荐)
Mar 21 Python
python实现解数独程序代码
Apr 12 Python
numpy排序与集合运算用法示例
Dec 15 Python
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
Jun 09 Python
Python3多进程 multiprocessing 模块实例详解
Jun 11 Python
Python入门Anaconda和Pycharm的安装和配置详解
Jul 16 Python
Django restful framework生成API文档过程详解
Nov 12 Python
python math模块的基本使用教程
Jan 16 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实现登陆验证码(类似条行码状)
2006/10/09 PHP
JS中style属性
2006/10/11 Javascript
javascript拖拽上传类库DropzoneJS使用方法
2013/12/05 Javascript
JavaScript中判断变量是数组、函数或是对象类型的方法
2015/02/25 Javascript
JQuery中绑定事件(bind())和移除事件(unbind())
2015/02/27 Javascript
javascript实现密码验证
2015/11/10 Javascript
利用Node.js编写跨平台的spawn语句详解
2017/02/12 Javascript
vue-resource 拦截器(interceptor)的使用详解
2017/07/04 Javascript
vue打包后显示空白正确处理方法
2017/11/01 Javascript
bootstrap 通过加减按钮实现输入框组功能
2017/11/15 Javascript
jquery实现侧边栏左右伸缩效果的示例
2017/12/19 jQuery
Vue组件中prop属性使用说明实例代码详解
2018/05/31 Javascript
使用JavaScript生成罗马字符的实例代码
2018/06/08 Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
2019/01/28 jQuery
vue 封装面包屑组件教程
2020/11/16 Javascript
uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果
2020/12/10 Javascript
基于python编写的微博应用
2014/10/17 Python
简单介绍Python的轻便web框架Bottle
2015/04/08 Python
Django模板变量如何传递给外部js调用的方法小结
2017/07/24 Python
Python3使用正则表达式爬取内涵段子示例
2018/04/22 Python
详解CSS透明opacity和IE各版本透明度滤镜filter的最准确用法
2016/12/20 HTML / CSS
深入浅析HTML5中的article和section的区别
2018/05/15 HTML / CSS
乌克兰品牌化妆品和香水在线商店:Bomond
2020/01/14 全球购物
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
函授本科毕业生自我鉴定
2013/10/16 职场文书
高中生自我鉴定范文
2013/10/30 职场文书
2014学校庆三八妇女节活动总结
2014/03/01 职场文书
毕业生如何写自荐信
2014/03/26 职场文书
《望庐山瀑布》教学反思
2014/04/22 职场文书
保护环境建议书400字
2014/05/13 职场文书
2016年六一文艺汇演开幕词
2016/03/04 职场文书
深度学习详解之初试机器学习
2021/04/14 Python
用基于python的appium爬取b站直播消费记录
2021/04/17 Python
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android
Go语言实现Base64、Base58编码与解码
2021/07/26 Golang
数据设计之权限的实现
2022/08/05 MySQL