国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

在Django的模型和公用函數中使用惰性翻譯對象

2019-11-25 17:07:35
字體:
來源:轉載
供稿:網友

在模型和公用函數中,使用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_lazydef fancy_utility_function(s, ...):  # Do some conversion on string 's'  # ...fancy_utility_function = allow_lazy(fancy_utility_function, unicode)

allow_lazy() 裝飾符 采用了另外的函數來裝飾,以及一定量的,原始函數可以返回的特定類型的額外參數 (*args ) 。 通常,在這里包括 unicode 就足夠了并且確定你的函數將僅返回Unicode字符串。

使用這個修飾符意味著你能寫你的函數并且假設輸入是合適的字符串,然后在末尾添加對惰性翻譯對象的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 留坝县| 贺州市| 吉林市| 湘阴县| 汽车| 沈阳市| 宜良县| 博乐市| 忻州市| 博爱县| 通辽市| 彰化市| 石屏县| 小金县| 什邡市| 临泉县| 读书| 南宁市| 淮北市| 靖远县| 沿河| 拉孜县| 昌吉市| 华蓥市| 宜兰县| 延寿县| 涪陵区| 安吉县| 定南县| 广德县| 临洮县| 沙洋县| 怀化市| 海盐县| 宜兰市| 松桃| 瓮安县| 凤山市| 隆子县| 衡南县| 柳州市|