>>fromdjango.templateimportContext,Template>>>t=Templ" />

黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

Python的Django框架中的Context使用

系統(tǒng) 2014 0

一旦你創(chuàng)建一個 Template 對象,你可以用 context 來傳遞數(shù)據(jù)給它。 一個context是一系列變量和它們值的集合。

context在Django里表現(xiàn)為 Context 類,在 django.template 模塊里。 她的構(gòu)造函數(shù)帶有一個可選的參數(shù): 一個字典映射變量和它們的值。 調(diào)用 Template 對象 的 render() 方法并傳遞context來填充模板:

            
>>> from django.template import Context, Template
>>> t = Template('My name is {{ name }}.')
>>> c = Context({'name': 'Stephane'})
>>> t.render(c)
u'My name is Stephane.'


          

我們必須指出的一點是,t.render(c)返回的值是一個Unicode對象,不是普通的Python字符串。 你可以通過字符串前的u來區(qū)分。 在框架中,Django會一直使用Unicode對象而不是普通的字符串。 如果你明白這樣做給你帶來了多大便利的話,盡可能地感激Django在幕后有條不紊地為你所做這這么多工作吧。 如果不明白你從中獲益了什么,別擔(dān)心。你只需要知道Django對Unicode的支持,將讓你的應(yīng)用程序輕松地處理各式各樣的字符集,而不僅僅是基本的A-Z英文字符。

字典和Contexts

Python的字典數(shù)據(jù)類型就是關(guān)鍵字和它們值的一個映射。 Context 和字典很類似, Context 還提供更多的功能。

變量名必須由英文字符開始 (A-Z或a-z)并可以包含數(shù)字字符、下劃線和小數(shù)點。 (小數(shù)點在這里有特別的用途,稍后我們會講到)變量是大小寫敏感的。

下面是編寫模板并渲染的示例:

            
>>> from django.template import Template, Context
>>> raw_template = """
            

Dear {{ person_name }},

... ...

Thanks for placing an order from {{ company }}. It's scheduled to ... ship on {{ ship_date|date:"F j, Y" }}.

... ... {% if ordered_warranty %} ...

Your warranty information will be included in the packaging.

... {% else %} ...

You didn't order a warranty, so you're on your own when ... the products inevitably stop working.

... {% endif %} ... ...

Sincerely,
{{ company }}

""" >>> t = Template(raw_template) >>> import datetime >>> c = Context({'person_name': 'John Smith', ... 'company': 'Outdoor Equipment', ... 'ship_date': datetime.date(2009, 4, 2), ... 'ordered_warranty': False}) >>> t.render(c) u"

Dear John Smith,

\n\n

Thanks for placing an order from Outdoor Equipment. It's scheduled to\nship on April 2, 2009.

\n\n\n

You didn't order a warranty, so you're on your own when\nthe products inevitably stop working.

\n\n\n

Sincerely,
Outdoor Equipment

"

讓我們逐步來分析下這段代碼:

??? 首先我們導(dǎo)入 (import)類 Template 和 Context ,它們都在模塊 django.template 里。

??? 我們把模板原始文本保存到變量 raw_template 。注意到我們使用了三個引號來 標(biāo)識這些文本,因為這樣可以包含多行。

??? 接下來,我們創(chuàng)建了一個模板對象 t ,把 raw_template 作為 Template 類構(gòu)造函數(shù)的參數(shù)。

??? 我們從Python的標(biāo)準(zhǔn)庫導(dǎo)入 datetime 模塊,以后我們將會使用它。

??? 然后,我們創(chuàng)建一個 Context 對象, c 。 Context 構(gòu)造的參數(shù)是Python 字典數(shù)據(jù)類型。 在這里,我們指定參數(shù) person_name 的值是 'John Smith' , 參數(shù)company 的值為 ‘Outdoor Equipment' ,等等。

??? 最后,我們在模板對象上調(diào)用 render() 方法,傳遞 context參數(shù)給它。 這是返回渲染后的模板的方法,它會替換模板變量為真實的值和執(zhí)行塊標(biāo)簽。

??? 注意,warranty paragraph顯示是因為 ordered_warranty 的值為 True . 注意時間的顯示, April 2, 2009 , 它是按 'F j, Y' 格式顯示的。

??? 如果你是Python初學(xué)者,你可能在想為什么輸出里有回車換行的字符('\n' )而不是 顯示回車換行? 因為這是Python交互解釋器的緣故: 調(diào)用 t.render(c) 返回字符串, 解釋器缺省顯示這些字符串的 真實內(nèi)容呈現(xiàn) ,而不是打印這個變量的值。 要顯示換行而不是 '\n' ,使用 print 語句: print t.render(c) 。

這就是使用Django模板系統(tǒng)的基本規(guī)則: 寫模板,創(chuàng)建 Template 對象,創(chuàng)建 Context , 調(diào)用 render() 方法。

同一模板,多個上下文

一旦有了 模板 對象,你就可以通過它渲染多個context, 例如:

            
>>> from django.template import Template, Context
>>> t = Template('Hello, {{ name }}')
>>> print t.render(Context({'name': 'John'}))
Hello, John
>>> print t.render(Context({'name': 'Julie'}))
Hello, Julie
>>> print t.render(Context({'name': 'Pat'}))
Hello, Pat


          

無論何時我們都可以像這樣使用同一模板源渲染多個context,只進行 一次模板創(chuàng)建然后多次調(diào)用render()方法渲染會更為高效:

            
# Bad
for name in ('John', 'Julie', 'Pat'):
  t = Template('Hello, {{ name }}')
  print t.render(Context({'name': name}))

# Good
t = Template('Hello, {{ name }}')
for name in ('John', 'Julie', 'Pat'):
  print t.render(Context({'name': name}))


          

Django 模板解析非常快捷。 大部分的解析工作都是在后臺通過對簡短正則表達(dá)式一次性調(diào)用來完成。 這和基于 XML 的模板引擎形成鮮明對比,那些引擎承擔(dān)了 XML 解析器的開銷,且往往比 Django 模板渲染引擎要慢上幾個數(shù)量級。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論