Web2py视图


web2py框架在其应用程序中使用 模型控制器视图 。它在 视图中 包含一个稍微修改过的Python语法,用于获取更多可读代码,而不受任何适用于正确Python使用的限制。

web2py View 的主要目的是将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 的anchor < a>标签对应的助手。它以编程方式构建HTML锚点 < a>标记。

HTML助手由两种类型组成,即 位置 参数和 命名 参数。

  • 位置 参数被解释为包含在HTML打开和关闭标签之间的对象。

  • 下划线开头的 命名 参数被解释为HTML标签。

使用 str 和xml方法,Helpers在字符串序列化中也很有用。例如 -

>>> 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('', XML('world'), _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(TITLE(''))
IMG 它有助于为给定的HTML页面嵌入图像。
IMG(_src = 'http://example.com/image.png',_alt = 'test')

自定义助手

这些助手用于根据需求定制标签。web2py使用以下自定义助手 -

标签

web2py使用TAG作为通用标签生成器。它有助于生成定制的XML标签。一般语法如下 -

{{ = TAG.name('a', 'b', _c = 'd')}}

它生成XML代码为:<name c =“d”> ab </ name>

TAG是一个对象,TAG.name或者TAG['name']是一个返回临时帮助类的函数。

菜单

这个帮助器列出了列表项或菜单项的值,生成了代表菜单的树形结构。菜单项列表的形式是 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({"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。

元素 返回匹配指定条件的第一个子元素。另一方面, 元素 返回所有匹配子项的列表。两者使用相同的语法。

这可以用下面的例子来演示 -

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” ,后者又包含 “header.html”

{{extend 'layout.html'}}
<h1>Hello World</h1>
{{include 'page.html'}}

在前面的章节中,我们为公司模块创建了模型和控制器。现在,我们将重点介绍视图的创建,这有助于呈现数据的显示。

默认情况下,web2py中的视图包含 layout.htmlindex.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>

输出结果如下 -

视图创建