Web2py - 视图

  • 简述

    web2py 框架在其应用程序中使用模型控制器视图。它在视图中包含略微修改的 Python 语法,以获得更具可读性的代码,而没有对 Python 的正确使用施加任何限制。
    web2py视图的主要目的是将 python 代码嵌入到 HTML 文档中。但是,它面临一些问题,如下所示 -
    • 转义 HTML 文档中的嵌入式 Python 代码。
    • 以下缩进基于 Python,这可能会影响 HTML 规则。
    为了避免这些问题,web2py 在视图部分使用分隔符 {{..}}。定界符有助于转义嵌入的 Python 代码。它还有助于遵循 HTML 缩进规则。
    {{..}}分隔符中包含的代码包含意外的 Python 代码。由于 Python 通常使用缩进来分隔代码块,因此应以适当的方式维护分隔符中的非预期代码。为了克服这个问题,web2py 使用了“pass”关键字。
    以 line 开头的代码块以冒号终止,以 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>标签对应的helper 。它以编程方式构建 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>
    
    输出如下 -
    查看创建