在web2py中使用HTML助手构建HTML标记的好处是什么?

13

我想了解在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]))}}

用普通的HTML标记编写此代码会产生以下结果:

<a href="/reddish/default/vote/up/{{=item.id}}"><img src="/reddish/static/up.png"/></a>

我发现纯HTML标记更易于阅读。但是我想知道使用HTML助手程序是否有任何好处?

顺便说一下,我能够立刻看到的一个好处就是,HTML助手程序代码不需要显式地编写应用程序的名称,即reddish。除此之外,使用HTML助手程序还有其他好处吗?

1个回答

19

首先,即使在您的第二个示例中,您也应该执行以下操作:

<a href="{{=URL('vote', args=['up', item.id])}}">
<img src="{{=URL('static', 'up.png')}}"/></a>

即使在视图中,编写URL时也要始终使用URL()助手程序。它处理出站重写,并知道当前应用程序(和控制器),因此您不必包括它们(这意味着如果您更改它们的名称,则所有URL仍将起作用)。此外,现在不再需要指定request或使用cf关键字(reddish是一个旧应用程序)。

关于助手程序,一般的经验法则是,在控制器、模型或模块中需要创建或操作HTML时使用它们,但在视图中使用常规的HTML标记(与Python混合,如您的第二个示例)。然而,有一个例外,就是当您需要在视图中构建复杂的HTML结构时。在这种情况下,可能更容易在单个Python代码块中操纵助手程序,而不是将常规HTML标记与Python混合。例如,如果您有一个字典列表(具有键'f1'、'f2'、'f3'),并且想要创建一个HTML表格,则可以执行以下操作:

{{=TABLE([TR(row['f1'], row['f2'], row['f3']) for row in rows])}}

你可以使用 HTML 和 Python 混合编写相同的内容,但这样会变得更冗长和混乱。
另一个主要优点是辅助函数会创建 服务器端 DOM,可以在 Python 代码中进行操作。在模型/控制器代码中最有可能创建的辅助函数是表单(通过 FORM、SQLFORM、Crud 和 Auth 系统)和表格(通过 SQLTABLE、SQLFORM.grid 和 Crud)。这些辅助函数本身包含其他辅助函数,例如表格、div 和 ul,并且可以在服务器端进行操作,然后再序列化为 HTML(例如)。
此外,一些辅助函数具有特殊功能,可以增加功能或使它们更易于使用:
  • A:与<a></a>相同,但还需要特殊参数来处理Ajax回调。
  • HTML:自动添加doctype字符串。
  • INPUTOPTION:采用特殊的value参数来设置当前值,并自动处理设置checkedselected属性。
  • OLULSELECTTRTBODY:与它们的HTML对应项类似,除了它们会自动将未命名的参数(或列表/元组的元素)转换为相应的子元素(即<li><option><td><tr>)。 (上面的表格示例利用了这一事实--TR()自动将单独的元素转换为单独的TD。)

最后,有许多具有专门功能的辅助工具:

  • BEAUTIFY: 构建复合对象的HTML表示。
  • CODE: 替代<pre></ pre>,自动处理几种编程语言的代码高亮和行号。
  • MARKMIN: 将markmin代码转换为HTML。
  • MENU: 从嵌套的元组列表创建嵌套的ul。
  • TAG: 通用标签生成器和HTML解析器。
  • XML: 封装不应该被转义或应该被清理的文本。

有关更多详细信息,请参见helpers documentation


这是一个很好的解释。非常感谢 :) - Mert Nuhoglu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接