开发手册 欢迎您!
软件开发者资料库

Web2py - 视图

Web2py视图 - 从简介,Python语言,框架概述,核心,视图,数据库抽象层,表单和验证器,电子邮件和SMS,访问控制,服务,添加AJAX效果,组件,部署,安全性开始学习Web2py。

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>'))
IMGIt有助于为给定的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 ']])

输出将显示如下 :

   
  • One
  •    
  • Two
  • BEAUTIFY

    它有助于构建复合对象的表示,包括列表和词典.例如,

    {{ = BEAUTIFY({"a": ["hello", XML("world")], "b": (1, 2)})}}

    它返回一个可序列化为XML的XML对象,并带有其构造函数参数的表示.在这种情况下,表示将是 :

    {"a": ["hello", XML("world")], "b": (1, 2)}

    输出将呈现为 :

                                                       
    a:helloworld
    b:12

    服务器端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

       {{for company in companies:}}                        {{pass}}            
    {{ = 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'))}}

    输出如下 :

    查看创建