在Django的模型和公用函數(shù)中使用惰性翻譯對象
在模型和公用函數(shù)中,使用ugettext_lazy()和ungettext_lazy()來標記字符串是很普遍的操作。 當你在你的代碼中其它地方使用這些對象時,你應當確定你不會意外地轉(zhuǎn)換它們成一個字符串,因為它們應被盡量晚地轉(zhuǎn)換(以便正確的地域生效) 這需要使用幾個幫助函數(shù)。
拼接字符串: string_concat()
標準Python字符串拼接(''.join([...]) ) 將不會工作在包括惰性翻譯對象的列表上。 作為替代,你可以使用django.utils.translation.string_concat(), 這個函數(shù)創(chuàng)建了一個惰性對象,其連接起它的內(nèi)容 并且 僅當結(jié)果被包括在一個字符串中時轉(zhuǎn)換它們?yōu)樽址?。 例如:
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 中的惰性翻譯將僅被轉(zhuǎn)換為字符串(通常在模板渲染時間)。
allow_lazy() 修飾符
Django提供很多功能函數(shù)(如:取一個字符串作為他們的第一個參數(shù)并且對那個字符串做些什么)。(尤其在 django.utils 中) 這些函數(shù)被模板過濾器像在其他代碼中一樣直接使用。
如果你寫你自己的類似函數(shù)并且與翻譯打交道,當?shù)谝粋€參數(shù)是惰性翻譯對象時,你會面臨“做什么”的難題。 因為你可能在視圖之外使用這個函數(shù)(并且因此當前線程的本地設置將會不正確),所以你不想立即轉(zhuǎn)換其為一個字符串。
象這種情況,請使用 django.utils.functional.allow_lazy() 修飾符。 它修改這個函數(shù)以便 假如第一個參數(shù)是一個惰性翻譯, 這個函數(shù)的賦值會被延后直到它需要被轉(zhuǎn)化為一個字符串為止。
例如:
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() 裝飾符 采用了另外的函數(shù)來裝飾,以及一定量的,原始函數(shù)可以返回的特定類型的額外參數(shù) (*args ) 。 通常,在這里包括 unicode 就足夠了并且確定你的函數(shù)將僅返回Unicode字符串。
使用這個修飾符意味著你能寫你的函數(shù)并且假設輸入是合適的字符串,然后在末尾添加對惰性翻譯對象的支持。
- django模型中的字段和model名顯示為中文小技巧分享
- Django中模型Model添加JSON類型字段的方法
- django模型層(model)進行建表、查詢與刪除的基礎(chǔ)教程
- Django 根據(jù)數(shù)據(jù)模型models創(chuàng)建數(shù)據(jù)表的實例
- 淺談Django中的數(shù)據(jù)庫模型類-models.py(一對一的關(guān)系)
- Django 模型類(models.py)的定義詳解
- Django的models模型的具體使用
- 利用信號如何監(jiān)控Django模型對象字段值的變化詳解
- django框架面向?qū)ο驩RM模型繼承用法實例分析
- Django框架model模型對象驗證實現(xiàn)方法分析
相關(guān)文章
Linux下使用python腳本執(zhí)行BCP導入導出方式
這篇文章主要介紹了Linux下使用python腳本執(zhí)行BCP導入導出方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
在CMD窗口中調(diào)用python函數(shù)的實現(xiàn)
本文主要介紹了在CMD窗口中調(diào)用python函數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07
python如何爬取網(wǎng)站數(shù)據(jù)并進行數(shù)據(jù)可視化
這篇文章主要介紹了python爬取拉勾網(wǎng)數(shù)據(jù)并進行數(shù)據(jù)可視化,爬取拉勾網(wǎng)關(guān)于python職位相關(guān)的數(shù)據(jù)信息,并將爬取的數(shù)據(jù)已csv各式存入文件,然后對csv文件相關(guān)字段的數(shù)據(jù)進行清洗,并對數(shù)據(jù)可視化展示,包括柱狀圖展示、直方圖展示,需要的朋友可以參考下2019-07-07
Python利用pyodbc庫將文件信息插入Access數(shù)據(jù)庫
在日常編程工作中,我們經(jīng)常需要處理文件和文件夾,所以本文將介紹如何使用Python編程語言和wxPython庫創(chuàng)建一個簡單的文件瀏覽器界面,使用戶能夠選擇文件夾并將文件信息插入到Access數(shù)據(jù)庫中,需要的可以參考下2023-08-08
Python利用Pillow(PIL)庫實現(xiàn)驗證碼圖片的全過程
這篇文章主要給大家介紹了關(guān)于Python利用Pillow(PIL)庫實現(xiàn)驗證碼圖片的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-10-10
python中l(wèi)xml.etree 和 ElementTree 的區(qū)別解析
lxml.etree 提供了更多的功能,例如 XPath、XSLT、Relax NG、 和 XML 模式支持,etree 對 Python unicode 字符串的想法與 ElementTree 不同,本文給大家介紹python中l(wèi)xml.etree 和 ElementTree 的區(qū)別,感興趣的朋友一起看看吧2024-01-01

