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

首頁 > 編程 > Python > 正文

Python的Django框架中的Context使用

2019-11-25 17:11:11
字體:
供稿:網(wǎng)友

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

context在Django里表現(xiàn)為 Context 類,在 django.template 模塊里。 她的構(gòu)造函數(shù)帶有一個(gè)可選的參數(shù): 一個(gè)字典映射變量和它們的值。 調(diào)用 Template 對(duì)象 的 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.'

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

字典和Contexts

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

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

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

>>> from django.template import Template, Context>>> raw_template = """<p>Dear {{ person_name }},</p>...... <p>Thanks for placing an order from {{ company }}. It's scheduled to... ship on {{ ship_date|date:"F j, Y" }}.</p>...... {% if ordered_warranty %}... <p>Your warranty information will be included in the packaging.</p>... {% else %}... <p>You didn't order a warranty, so you're on your own when... the products inevitably stop working.</p>... {% endif %}...... <p>Sincerely,<br />{{ company }}</p>""">>> 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"<p>Dear John Smith,</p>/n/n<p>Thanks for placing an order from OutdoorEquipment. It's scheduled to/nship on April 2, 2009.</p>/n/n/n<p>Youdidn't order a warranty, so you're on your own when/nthe productsinevitably stop working.</p>/n/n/n<p>Sincerely,<br />Outdoor Equipment</p>"

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

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

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

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

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

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

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

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

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

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

同一模板,多個(gè)上下文

一旦有了 模板 對(duì)象,你就可以通過它渲染多個(gè)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

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

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

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

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 永寿县| 新竹县| 阿克苏市| 启东市| 宜宾市| 云安县| 镇巴县| 宾阳县| 明光市| 连平县| 江华| 四会市| 康马县| 景泰县| 桓台县| 璧山县| 连城县| 福鼎市| 淮南市| 法库县| 金平| 福安市| 电白县| 安宁市| 秦皇岛市| 阆中市| 广饶县| 信丰县| 九江市| 青阳县| 南宁市| 醴陵市| 台北县| 瓦房店市| 卢湾区| 遵义县| 龙岩市| 大关县| 启东市| 新郑市| 凌云县|