在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格式化css文件的方法
Mar 10 Python
C#返回当前系统所有可用驱动器符号的方法
Apr 18 Python
Python批量提取PDF文件中文本的脚本
Mar 14 Python
Python学习笔记之open()函数打开文件路径报错问题
Apr 28 Python
numpy返回array中元素的index方法
Jun 27 Python
Python并行分布式框架Celery详解
Oct 15 Python
解决Python selenium get页面很慢时的问题
Jan 30 Python
python交互界面的退出方法
Feb 16 Python
python的schedule定时任务模块二次封装方法
Feb 19 Python
解决Tensorflow占用GPU显存问题
Feb 03 Python
Python对wav文件的重采样实例
Feb 25 Python
python如何读取和存储dict()与.json格式文件
Jun 25 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
如何在PHP程序中防止盗链
2008/04/09 PHP
深入php多态的实现详解
2013/06/09 PHP
ThinkPHP整合百度Ueditor图文教程
2014/10/21 PHP
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
2012/08/14 Javascript
实用的Jquery选项卡TAB示例代码
2013/08/28 Javascript
jQuery中常用动画效果函数(日常整理)
2016/09/17 Javascript
浅谈javascript中的数据类型转换
2016/12/27 Javascript
angularJS之$http:与服务器交互示例
2017/03/17 Javascript
webpack 2的react开发配置实例代码
2017/07/28 Javascript
jQuery实现简单的Ajax调用功能示例
2019/02/15 jQuery
ES6实现图片切换特效代码
2020/01/14 Javascript
Vue data的数据响应式到底是如何实现的
2020/02/11 Javascript
微信小程序实现底部弹出框
2020/11/18 Javascript
[08:47]2018国际邀请赛 OG战队举杯时刻
2018/08/29 DOTA
python字符串连接的N种方式总结
2014/09/17 Python
python数据结构之图的实现方法
2015/07/08 Python
ubuntu环境下python虚拟环境的安装过程
2018/01/07 Python
tensorflow实现简单逻辑回归
2018/09/07 Python
Python设计模式之策略模式实例详解
2019/01/21 Python
pandas删除指定行详解
2019/04/04 Python
Python Flask框架模板操作实例分析
2019/05/03 Python
opencv+python实现均值滤波
2020/02/19 Python
Python爬虫实现模拟点击动态页面
2020/03/05 Python
基于pandas向csv添加新的行和列
2020/05/25 Python
python让函数不返回结果的方法
2020/06/22 Python
区分python中的进程与线程
2020/08/13 Python
Pycharm github配置实现过程图解
2020/10/13 Python
Python将QQ聊天记录生成词云的示例代码
2021/02/10 Python
手工制作的意大利太阳镜和光学元件:Illesteva
2019/01/19 全球购物
Python使用openpyxl复制整张sheet
2021/03/24 Python
应届毕业生的个人自我鉴定
2013/10/24 职场文书
会计主管岗位职责
2014/01/03 职场文书
2014年收银工作总结
2014/11/13 职场文书
保管员岗位职责
2015/02/14 职场文书
教你用python实现12306余票查询
2021/06/30 Python