国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python的Django框架中的Context使用

Python的Django框架中的Context使用

2020-07-23 10:33Python教程網 Python

這篇文章主要介紹了Python的Django框架中的Context使用,相關的渲染是Django中創建模版的關鍵,需要的朋友可以參考下

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

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

?
1
2
3
4
5
>>> 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來區分。 在框架中,Django會一直使用Unicode對象而不是普通的字符串。 如果你明白這樣做給你帶來了多大便利的話,盡可能地感激Django在幕后有條不紊地為你所做這這么多工作吧。 如果不明白你從中獲益了什么,別擔心。你只需要知道Django對Unicode的支持,將讓你的應用程序輕松地處理各式各樣的字符集,而不僅僅是基本的A-Z英文字符。

字典和Contexts

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
>>> 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 Outdoor
Equipment. It's scheduled to\nship on April 2, 2009.</p>\n\n\n<p>You
didn't order a warranty, so you're on your own when\nthe products
inevitably stop working.</p>\n\n\n<p>Sincerely,<br />Outdoor Equipment
</p>"

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

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

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

    接下來,我們創建了一個模板對象 t ,把 raw_template 作為 Template 類構造函數的參數。

    我們從Python的標準庫導入 datetime 模塊,以后我們將會使用它。

    然后,我們創建一個 Context 對象, c 。 Context 構造的參數是Python 字典數據類型。 在這里,我們指定參數 person_name 的值是 'John Smith' , 參數company 的值為 ‘Outdoor Equipment' ,等等。

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

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

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

這就是使用Django模板系統的基本規則: 寫模板,創建 Template 對象,創建 Context , 調用 render() 方法。

同一模板,多個上下文

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

?
1
2
3
4
5
6
7
8
>>> 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,只進行 一次模板創建然后多次調用render()方法渲染會更為高效:

?
1
2
3
4
5
6
7
8
9
# 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 模板解析非常快捷。 大部分的解析工作都是在后臺通過對簡短正則表達式一次性調用來完成。 這和基于 XML 的模板引擎形成鮮明對比,那些引擎承擔了 XML 解析器的開銷,且往往比 Django 模板渲染引擎要慢上幾個數量級。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲国产成人精品女人久久久 | 国产视频在线看 | 牛牛澡牛牛爽一区二区 | 久久成人精品 | 国产精品美乳一区二区免费 | 99在线视频观看 | 欧美 国产精品 | 欧美日韩免费视频 | 国产伦精品一区二区三区四区视频 | 国产一区网站 | 精品久久久久一区二区国产 | 亚洲精品成a人ⅴ香蕉片 | 日本精品在线 | 亚洲天堂高清 | 亚洲 欧美 精品 | 成人国产电影 | 亚洲四区 | 亚洲国产福利一区 | 久久丁香 | 中文字幕日韩欧美一区二区三区 | 一区二区三区日韩 | 欧美在线视频一区 | 色xxx| 91天堂| 成人午夜视频免费 | 久久久999国产 | 最新国产视频 | 色综合天天天天做夜夜夜夜做 | 欧美亚洲天堂 | 亚洲高清www | 羞羞视频网 | 久久久91精品国产一区二区三区 | av福利在线观看 | 国产精品久久久久av | 亚洲 欧美 精品 | 中文字幕在线观看一区二区三区 | 国产精品久久久久久久久久新婚 | 欧美日韩在线精品 | 牛牛澡牛牛爽一区二区 | 亚洲精品国产精品国自产在线 | 黄色大片aaaa |