我想了解在web2py中使用HTML帮助程序而不是纯HTML标记元素的好处.例如,我在web2py应用程序(reddish)中阅读了以下HTML标记构建器代码:
{{=A(IMG(_src=URL(r=request,c='static',f='up.png')),_href=URL(r=request,f='vote',args=['up',item.id]))}}
Run Code Online (Sandbox Code Playgroud)
通过纯HTML标记编写此代码会导致:
<a href="/reddish/default/vote/up/{{=item.id}}"><img src="/reddish/static/up.png"/></a>
Run Code Online (Sandbox Code Playgroud)
我发现简单的HTML标记更容易阅读.但我想了解使用HTML帮助程序是否有任何好处?
顺便说一下,我第一眼看到的一个好处就是HTML帮助程序代码不需要编写应用程序的名称,即reddish显式.除此之外,使用HTML帮助程序还有其他好处吗?
Ant*_*ony 19
首先,即使在你的第二个例子中,你也应该这样做:
<a href="{{=URL('vote', args=['up', item.id])}}">
<img src="{{=URL('static', 'up.png')}}"/></a>
Run Code Online (Sandbox Code Playgroud)
始终使用URL()帮助程序来编写URL,即使在视图中也是如此.它处理传出的重写,它知道当前的应用程序(和控制器),因此您不必包含那些(这意味着如果您更改其名称,所有URL仍然有效).此外,不再需要指定request或使用c和f关键字(reddish是一个旧的应用程序).
关于帮助程序,一般的经验法则是在需要在控制器,模型或模块中创建或操作HTML时使用它们,但在视图中使用常规HTML标记(与Python混合,如第二个示例中所示) .但是,一个例外是当您需要在视图中构建复杂的HTML结构时.在这种情况下,在单个Python代码块中操作帮助程序可能更容易,而不是将常规HTML标记与Python混合.例如,如果您在字典列表中包含数据(使用键'f1','f2','f3')并且想要创建HTML表格,则可以执行以下操作:
{{=TABLE([TR(row['f1'], row['f2'], row['f3']) for row in rows])}}
Run Code Online (Sandbox Code Playgroud)
你可以做同样的事情混合HTML和Python,但它会更长,更麻烦.
帮助程序的另一个主要好处是它们创建了一个可以在Python代码中操作的服务器端DOM.您最有可能在模型/控制器代码中创建的帮助程序是表单(通过FORM,SQLFORM,Crud和Auth系统)和表(通过SQLTABLE,SQLFORM.grid和Crud).这些帮助程序本身包含其他帮助程序,例如表,div和ul,它们可以在被序列化为HTML之前在服务器端进行操作(例如).
此外,一些帮助程序具有添加功能或使其更易于使用的特殊功能:
A:同样<a></a>,但也需要特殊的参数来处理Ajax回调.HTML:自动添加doctype字符串.INPUT,OPTION:使用特殊value参数设置当前值,并分别自动处理设置checked和selected属性.OL,UL,SELECT,TR,TBODY:像他们的HTML,除了前者自动转换未命名的参数(或列表/元组的元素)不属于佣到相应的子元素(即<li>,<option>,<td>,和<tr>,分别).(上面的表格示例利用了这一事实 - TR()自动将各个元素转换为单独的元素TD.)最后,有许多帮助器具有专门的功能:
BEAUTIFY:构建复合对象的HTML表示形式.CODE:替代方案可<pre></pre>自动处理多种编程语言的代码突出显示和行编号.MARKMIN:将markmin代码转换为HTML.MENU:从嵌套的元组列表中创建嵌套的ul.TAG:通用标记生成器和HTML解析器.XML:封装不应转义的文本或应清理的文本.有关详细信息,请参阅帮助程序文档.
| 归档时间: |
|
| 查看次数: |
2450 次 |
| 最近记录: |