2011-11-11 37 views
13

我想了解在web2py中使用HTML助手而不是純HTML標記元素的好處。作爲一個例子,我讀入的web2py應用以下HTML標記生成器代碼(偏紅):在web2py中使用HTML助手構建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助手還有其他好處嗎?

回答

19

首先,即使是在你的第二個例子,你應該做的:

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

始終使用URL()助手寫的網址,甚至在意見。它處理傳出重寫,它知道當前的應用程序(和控制器),所以你不必包含這些(這意味着如果你改變他們的名字,所有的URL仍然可以工作)。此外,也不再需要指定request或使用cf關鍵字(微紅是一箇舊的應用程序)。

關於幫助者,一般的經驗法則是,如果你需要在控制器,模型或模塊中創建或操作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,但它會更長,更混亂。

傭工的另一個主要好處是,他們創造一個server-side DOM可以在你的Python代碼進行操作。你最有可能在你的模型/控制器代碼來創建助手是形式(通過形式SQLFORM,界面污物,並且認證系統)和表(通過SQLTABLE,SQLFORM.grid和CRUD)。這些傭工本身包含其他幫助,如表,申報單,和UL的,它們可以被序列化到HTML(for example)之前被操縱服務器端。

此外,一些助手有特殊的功能,添加功能或使它們更易於使用:

  • A:同<a></a>,但也需要特殊的參數來處理Ajax回調。
  • HTML:自動會預先文檔類型的字符串。
  • INPUT,OPTION:以一個特殊的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

+0

這是一個很好的解釋。非常感謝你 :) –