Web2py-视图

web2py框架在其应用程序中使用ModelsControllersViews。它在视图中包括经过稍微修改的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。

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

这可以通过以下示例进行演示:

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>

输出如下:

Web2py-视图

作者:terry,如若转载,请注明出处:https://www.web176.com/web2py/880.html

(0)
打赏 支付宝 支付宝 微信 微信
terryterry
上一篇 2020年11月2日 下午2:22
下一篇 2020年11月2日 下午2:39

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注