在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基础之包的导入和__init__.py的介绍
Jan 08 Python
python使用pandas实现数据分割实例代码
Jan 25 Python
pandas数据集的端到端处理
Feb 18 Python
python用match()函数爬数据方法详解
Jul 23 Python
Python 内置函数globals()和locals()对比详解
Dec 23 Python
通过python连接Linux命令行代码实例
Feb 18 Python
Python使用QQ邮箱发送邮件实例与QQ邮箱设置详解
Feb 18 Python
pygame实现飞机大战
Mar 11 Python
sklearn的predict_proba使用说明
Jun 28 Python
PyQt5通过信号实现MVC的示例
Feb 06 Python
Python绘制分类图的方法
Apr 20 Python
Python Django框架介绍之模板标签及模板的继承
May 27 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
中国的第一台收音机
2021/03/01 无线电
12个非常有创意的JavaScript小游戏
2010/03/18 Javascript
一些常用的JavaScript函数(json)附详细说明
2011/05/25 Javascript
JS删除数组元素的函数介绍
2013/03/27 Javascript
javascript中全局对象的parseInt()方法使用介绍
2013/12/19 Javascript
指定区域的图片自动按比例缩小的js代码(防止页面被图片撑破)
2014/02/21 Javascript
jquery获取多个checkbox的值异步提交给php
2015/07/07 Javascript
基于JavaScript实现移动端点击图片查看大图点击大图隐藏
2015/11/04 Javascript
JS鼠标拖拽实例分析
2015/11/23 Javascript
JS如何判断json是否为空
2016/07/06 Javascript
基于zepto.js实现手机相册功能
2017/07/11 Javascript
Bootstrap datepicker日期选择器插件使用详解
2017/07/26 Javascript
jQuery添加新内容的四个常用方法分析【append,prepend,after,before】
2019/03/19 jQuery
vue中使用百度脑图kityminder-core二次开发的实现
2019/09/26 Javascript
Python中使用语句导入模块或包的机制研究
2015/03/30 Python
python动态加载包的方法小结
2016/04/18 Python
Python图形绘制操作之正弦曲线实现方法分析
2017/12/25 Python
Python编写通讯录通过数据库存储实现模糊查询功能
2019/07/18 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
2019/08/17 Python
python处理自动化任务之同时批量修改word里面的内容的方法
2019/08/23 Python
python 线性回归分析模型检验标准--拟合优度详解
2020/02/24 Python
如何基于python实现不邻接植花
2020/05/01 Python
医学生个人求职信范文
2013/09/24 职场文书
大学生护理专业自荐信
2013/10/03 职场文书
自荐书模板
2013/12/15 职场文书
十岁生日父母答谢词
2014/01/18 职场文书
大学军训感言600字
2014/02/25 职场文书
集中整治工作方案
2014/05/01 职场文书
关于读书的演讲稿800字
2014/08/27 职场文书
2014年村支部书记四风对照检查材料思想汇报
2014/10/02 职场文书
金陵十三钗观后感
2015/06/04 职场文书
高中运动会前导词
2015/07/20 职场文书
Python函数式编程中itertools模块详解
2021/09/15 Python
解决Laravel使用验证时跳转到首页的问题
2021/11/17 PHP
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
2022/04/21 Python
PHP RabbitMQ消息列队
2022/05/11 PHP