- 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>
输出将如下所示: