在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 str与repr的区别
Mar 23 Python
win10系统中安装scrapy-1.1
Jul 03 Python
Django卸载之后重新安装的方法
Mar 15 Python
用python找出那些被“标记”的照片
Apr 20 Python
Django+Ajax+jQuery实现网页动态更新的实例
May 28 Python
python 阶乘累加和的实例
Feb 01 Python
python 缺失值处理的方法(Imputation)
Jul 02 Python
pygame实现俄罗斯方块游戏(AI篇1)
Oct 29 Python
在django admin详情表单显示中添加自定义控件的实现
Mar 11 Python
python3中的logging记录日志实现过程及封装成类的操作
May 12 Python
Python hashlib模块的使用示例
Oct 09 Python
Python 数据结构之十大经典排序算法一文通关
Oct 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
thinkphp3.x中cookie方法的用法分析
2016/05/19 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
2017/02/07 PHP
Laravel框架Blade模板简介及模板继承用法分析
2019/12/03 PHP
javascript脚本编程解决考试分数统计问题
2008/10/18 Javascript
JS函数验证总结(方便js客户端输入验证)
2010/10/29 Javascript
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
2012/06/14 Javascript
jQuery实现的导航下拉菜单效果示例
2016/09/05 Javascript
vue项目中做编辑功能传递数据时遇到问题的解决方法
2016/12/19 Javascript
基于Vue框架vux组件库实现上拉刷新功能
2017/11/28 Javascript
修改Nodejs内置的npm默认配置路径方法
2018/05/13 NodeJs
详解如何解决vue开发请求数据跨域的问题(基于浏览器的配置解决)
2018/11/12 Javascript
微信小程序实现工作时间段选择
2019/02/15 Javascript
详解微信小程序(Taro)手动埋点和自动埋点的实现
2021/03/02 Javascript
[14:20]刀塔大凶女神互压各路奇葩屌丝
2014/05/16 DOTA
Python 条件判断的缩写方法
2008/09/06 Python
python模拟新浪微博登陆功能(新浪微博爬虫)
2013/12/24 Python
Python中urllib2模块的8个使用细节分享
2015/01/01 Python
python操作mongodb根据_id查询数据的实现方法
2015/05/20 Python
在Python程序中操作文件之isatty()方法的使用教程
2015/05/24 Python
python 列表删除所有指定元素的方法
2018/04/19 Python
零基础使用Python读写处理Excel表格的方法
2019/05/02 Python
通过实例了解Python str()和repr()的区别
2020/01/17 Python
python 模块导入问题汇总
2021/02/01 Python
html5 css3 动态气泡按钮实例演示
2012/12/02 HTML / CSS
美国在线家居装饰店:Belle&June
2018/10/24 全球购物
英国著名书店:Foyles
2018/12/01 全球购物
软件设计的目标是什么
2016/12/04 面试题
工作人员思想汇报
2014/01/09 职场文书
会计工作心得体会
2014/01/13 职场文书
《晏子使楚》教学反思
2014/02/08 职场文书
办公自动化专业大学生职业规划书
2014/03/06 职场文书
职务聘任书范文
2014/03/29 职场文书
七夕活动策划方案
2014/08/16 职场文书
年度考核表个人总结
2015/03/06 职场文书
商场营业员岗位职责
2015/04/14 职场文书
大学生村官工作心得体会
2016/01/23 职场文书