在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之入门(四)运算
May 27 Python
python处理文本文件实现生成指定格式文件的方法
Jul 31 Python
socket + select 完成伪并发操作的实例
Aug 15 Python
利用django+wechat-python-sdk 创建微信服务器接入的方法
Feb 20 Python
Python3的高阶函数map,reduce,filter的示例详解
Jul 23 Python
Python 3.8 新功能全解
Jul 25 Python
python各类经纬度转换的实例代码
Aug 08 Python
关于pycharm中pip版本10.0无法使用的解决办法
Oct 10 Python
Python函数递归调用实现原理实例解析
Aug 11 Python
python将数据插入数据库的代码分享
Aug 16 Python
Matplotlib中rcParams使用方法
Jan 05 Python
python爬虫爬取某网站视频的示例代码
Feb 20 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在线生成二维码(google api)的实现代码详解
2013/06/04 PHP
PHP常用工具类大全附全部代码下载
2015/12/07 PHP
php 伪造HTTP_REFERER页面URL来源的三种方法
2016/09/22 PHP
PHP简单获取随机数的常用方法小结
2017/06/07 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
PHP PDOStatement::setFetchMode讲解
2019/02/03 PHP
学习YUI.Ext 第四天--对话框Dialog的使用
2007/03/10 Javascript
javascript 多浏览器 事件大全
2010/03/23 Javascript
javascript语言结构小记(一)
2011/09/10 Javascript
javascript中的if语句使用介绍
2013/11/20 Javascript
javascript日期格式化方法小结
2015/12/17 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
2016/05/17 Javascript
bootstrap下拉列表与输入框组结合的样式调整
2016/10/08 Javascript
BootStrap学习笔记之nav导航栏和面包屑导航
2017/01/03 Javascript
js实现手机拍照上传功能
2017/01/17 Javascript
jQuery EasyUI Panel面板组件使用详解
2017/02/28 Javascript
vue.js实现简单轮播图效果
2017/10/10 Javascript
详解使用jest对vue项目进行单元测试
2018/09/07 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
微信小程序外卖选购页实现切换分类与数量加减功能案例
2019/01/15 Javascript
python3.5 tkinter实现页面跳转
2018/01/30 Python
浅谈Pycharm中的Python Console与Terminal
2019/01/17 Python
python and or用法详解
2019/06/26 Python
pytorch使用tensorboardX进行loss可视化实例
2020/02/24 Python
CSS3中的clip-path使用攻略
2015/08/03 HTML / CSS
Linux面试经常问的文件系统操作命令
2015/11/05 面试题
对标管理实施方案
2014/03/12 职场文书
大专毕业生求职信
2014/07/05 职场文书
公司离职证明标准样本
2014/10/05 职场文书
2015年客服工作总结范文
2015/04/02 职场文书
搞笑婚庆主持词
2015/06/29 职场文书
党校培训学习心得体会
2016/01/06 职场文书
小学作文之描写天气
2019/08/15 职场文书
祝福语集锦:送给毕业同学祝福语
2019/11/21 职场文书
CSS 新特性 contain控制页面的重绘与重排问题
2021/04/30 HTML / CSS
Java死锁的排查
2022/05/11 Java/Android