web2py框架在其应用程序中使用模型,控制器和视图.它在 Views 中包含一个稍微修改过的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"))
输出
hello world
注意 : HTML帮助程序提供文档对象模型(DOM)的服务器端表示.
XML帮助程序
XML被称为对象,它封装了不应转义的文字.该文本可能包含也可能不包含有效的XML.
例如,对于下面提到的代码,它可能包含JavaScript.
>>> print XML('')
输出
内置助手
web2py中使用了许多内置助手.一些HTML内置帮助程序如下所示.
名称 | 用法 | 示例 |
---|---|---|
A | 这帮助器用于构建链接.它对应于锚标记 | [(A('Home',_ href = URL( 'default','home')),False,None,[]), ...] |
B | 这个助手帮助制作文本内容,粗体. | B('< hello>',XML('< i> world'),_ class ='test', _id = 0) |
BODY | 这个帮助器构成页面的主体.它还包括一个乘法运算符来增加休息次数. | BR() |
CODE | 执行语法突出显示Python,C,C + + 和web2py代码.此帮助程序还可以链接API文档. | CODE('print"hello"',language ='python').xml() |
FIELDSET | 它创建一个输入字段及其标签. | FIELDSET('高度:',INPUT(_name ='高度'),_类='测试') |
HEAD | 它有助于标记< head> HTML页面的标记. | HEAD(TITLE('< hello>')) |
IMG | It有助于为给定的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
TAG是一个对象, TAG.name
或 TAG ['name']
是一个返回a的函数临时助手类.
MENU
这个帮助器列出了列表项或菜单项的值,生成了树状结构代表菜单.菜单项列表采用 response.menu 的形式.例如 :
print MENU([['One',False,'link1'],['Two',False,'link2 ']])
输出将显示如下 :
BEAUTIFY
它有助于构建复合对象的表示,包括列表和词典.例如,
{{ = BEAUTIFY({"a": ["hello", XML("world")], "b": (1, 2)})}}
它返回一个可序列化为XML的XML对象,并带有其构造函数参数的表示.在这种情况下,表示将是 :
{"a": ["hello", XML("world")], "b": (1, 2)}
输出将呈现为 :
a | : | hello world |
b | : | 1 2 |
服务器端DOM渲染
服务器端渲染允许用户预渲染web2py的初始状态组件.所有派生的助手都提供搜索元素和元素来在服务器端呈现DOM.
元素返回匹配指定条件的第一个子元素.另一方面,元素返回所有匹配子元素的列表.两者都使用相同的语法.
这可以通过以下示例演示 :
a = DIV(DIV(DIV('a', _id = 'target',_class = 'abc')))d = a.elements('div#target')d[0][0] = 'changed'print a
输出为 :
changed
页面布局
视图用于显示最终用户的输出.它可以扩展以及包括其他视图.这将实现树状结构.
示例 : "index.html"扩展为"layout.html",其中可以包含"menu.html",其中包含"标题.html".
{{extend 'layout.html'}}Hello World
{{include 'page.html'}}
示例
在前面的章节中,我们为公司模块创建模型和控制器.现在,我们将专注于视图的创建,这有助于呈现数据.
默认情况下,web2py中的视图包含 layout.html 和 index.html ,它定义了显示数据的整体部分.
{{extend 'layout.html'}}Companies
{{ = A(company.name, _href = URL('contacts', args = company.id))}} | {{ = A('edit', _href = URL('company_edit', args = company.id))}} |
{{ = A('add company', _href = URL('company_create'))}} |
输出如下 :