- Web2py 教程
- Web2py - 首頁
- Web2py - 簡介
- Web2py - Python 語言
- Web2py - 框架概述
- Web2py - 核心
- Web2py - 檢視
- Web2py - 資料庫抽象層
- Web2py - 表單 & 驗證器
- Web2py - 郵件 & 簡訊
- Web2py - 訪問控制
- Web2py - 服務
- Web2py - 新增 Ajax 效果
- Web2py - 元件
- Web2py - 部署
- Web2py - 安全性
- Web2py 有用資源
- Web2py - 快速指南
- Web2py - 有用資源
- Web2py - 討論
Web2py - 檢視
web2py 框架在其應用程式中使用模型、控制器和檢視。它在檢視中包含了略微修改的 Python 語法,以便在沒有像正確使用 Python 那樣受到限制的情況下獲得更易讀的程式碼。
web2py 檢視的主要目的是將 python 程式碼嵌入到 HTML 文件中。但是,它面臨一些問題,如下所示:
- 在 HTML 文件中轉義嵌入的 python 程式碼。
- 遵循基於 Python 的縮排,這可能會影響 HTML 規則。
為了避免這些問題,web2py 在檢視部分使用分隔符 {{..}}。分隔符有助於轉義嵌入的 python 程式碼。它還有助於遵循 HTML 的縮排規則。
包含在{{..}}分隔符內的程式碼包括意外的 Python 程式碼。由於 Python 通常使用縮排分隔程式碼塊,因此分隔符內的意外程式碼應以正確的方式維護。為了克服這個問題,web2py 使用“pass”關鍵字。
以行開頭並以冒號結尾的程式碼塊以以 pass 開頭的行結束。
注意 - pass 是 Python 關鍵字,它不是 web2py 關鍵字。
以下程式碼顯示了 pass 關鍵字的實現:
{{
if num > 0:
response.write('positive number')
else:
response.write('negative number')
pass
}}
HTML 助手
web2py 包含可以用於以程式設計方式構建 HTML 程式的助手類。它對應於 HTML 標籤,稱為“HTML 助手”。
例如:
[(A('Home', _href = URL('default', 'home')), False, None, []), ...]
這裡,A 是對應於 HTML 的錨<a>標籤的助手。它以程式設計方式構建 HTML 錨<a>標籤。
HTML 助手包含兩種型別,即位置和命名引數。
位置引數被解釋為 HTML 開啟和關閉標籤之間包含的物件。
命名引數以下劃線開頭,被解釋為 HTML 標籤。
助手也可用於使用_str_和 xml 方法序列化字串。例如:
>>> print str(DIV(“hello world”))
輸出
<div> hello world </div>
注意 - HTML 助手提供了文件物件模型 (DOM) 的伺服器端表示。
XML 助手
XML 被稱為物件,它封裝了不應該轉義的文字。文字可能包含或不包含有效的 XML。
例如,對於下面提到的程式碼,它可能包含 JavaScript。
>>> print XML('<script>alert("unsafe!")</script>')
輸出
<script> alert(“unsafe!”)</script>
內建助手
web2py 中使用了許多內建助手。一些 HTML 內建助手如下所示。
| 名稱 | 用法 | 示例 |
|---|---|---|
| A | 此助手用於構建連結。它對應於錨標籤 |
[
(A('Home', _href = URL('default', 'home')), False, None, []),
...]
|
| B | 此助手有助於使文字內容加粗。 |
B('<hello>', XML('<i>world</i>'), _class = 'test', _id = 0)
|
| BODY | 此助手建立頁面的主體。它還包括一個乘法運算子來增加換行符的數量。 |
BR() |
| CODE | 它對 Python、C、C++ 和 web2py 程式碼執行語法高亮顯示。此助手還能夠連結 API 文件。 |
CODE('print "hello"', language = 'python').xml()
|
| FIELDSET | 它建立輸入欄位及其標籤。 |
FIELDSET('Height:', INPUT(_name = 'height'), _class = 'test')
|
| HEAD | 它有助於標記 HTML 頁面的<head>標籤。 |
HEAD(TITLE('<hello>'))
|
| IMG | 它有助於為給定的 HTML 頁面嵌入影像。 |
IMG(_src = 'http://example.com/image.png',_alt = 'test') |
自定義助手
這些助手用於根據需要自定義標籤。web2py 使用以下自定義助手:
TAG
web2py 使用 TAG 作為通用標籤生成器。它有助於生成自定義 XML 標籤。通用語法如下:
{{ = TAG.name('a', 'b', _c = 'd')}}
它生成 XML 程式碼為:<name c = "d">ab</name>
TAG 是一個物件,TAG.name 或 TAG['name'] 是一個返回臨時助手類的函式。
MENU
此助手列出列表項或選單項的值,生成一個樹狀結構來表示選單。選單項列表的形式為response.menu。例如:
print MENU([['One', False, 'link1'], ['Two', False, 'link2']])
輸出將顯示如下:
<ul class = "web2py-menu web2py-menu-vertical"> <li><a href = "link1">One</a></li> <li><a href = "link2">Two</a></li> </ul>
BEAUTIFY
它有助於構建複合物件的表示形式,包括列表和字典。例如,
{{ = BEAUTIFY({"a": ["hello", XML("world")], "b": (1, 2)})}}
它返回一個可序列化為 XML 的 XML 物件,其中包含其建構函式引數的表示形式。在這種情況下,表示形式將為:
{"a": ["hello", XML("world")], "b": (1, 2)}
輸出將呈現為:
<table>
<tr>
<td>a</td>
<td>:</td>
<td>hello<br />world</td>
</tr>
<tr>
<td>b</td>
<td>:</td>
<td>1<br />2</td>
</tr>
</table>
伺服器端 DOM 渲染
伺服器端渲染允許使用者預渲染 web2py 元件的初始狀態。所有派生助手都提供搜尋元素和元素以在伺服器端渲染 DOM。
element返回第一個匹配指定條件的子元素。另一方面,elements返回所有匹配子元素的列表。兩者使用相同的語法。
這可以透過以下示例來說明:
a = DIV(DIV(DIV('a', _id = 'target',_class = 'abc')))
d = a.elements('div#target')
d[0][0] = 'changed'
print a
輸出如下:
<div><div><div id = "target" class = "abc">changed</div></div></div>
頁面佈局
檢視用於向終端使用者顯示輸出。它可以擴充套件和包含其他檢視。這將實現樹狀結構。
例如 - “index.html”擴充套件到“layout.html”,它可以包含“menu.html”,而“menu.html”又包含“header.html”。
{{extend 'layout.html'}}
<h1>Hello World</h1>
{{include 'page.html'}}
示例
在前面的章節中,我們為公司模組建立了模型和控制器。現在,我們將重點關注檢視的建立,它有助於呈現資料的顯示。
預設情況下,web2py 中的檢視包括layout.html和index.html,它們定義了顯示資料的整體部分。
{{extend 'layout.html'}}
<h2>Companies</h2>
<table>
{{for company in companies:}}
<tr>
<td>{{ = A(company.name, _href = URL('contacts', args = company.id))}}</td>
<td>{{ = A('edit', _href = URL('company_edit', args = company.id))}}</td>
</tr>
{{pass}}
<tr>
<td>{{ = A('add company', _href = URL('company_create'))}}</td>
</tr>
</table>
輸出將如下所示: