2011-11-11 14 views
13

普通のHTMLマークアップ要素の代わりにweb2pyで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ヘルパーを使う利点があるかどうかを知りたいですか?

ちなみに、私が最初に見た1つの利点は、HTMLヘルパーコードでは、アプリケーションの名前、つまりreddishを明示的に書く必要がないことです。これ以外に、HTMLヘルパーを使用することで他にも利点がありますか?

答えて

19

まず、も、あなたの第二の例では、あなたが実行する必要があります。

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

は常にさえビューで、URLを書くためにURL()ヘルパーを使用します。それは、現在のアプリケーション(およびコントローラ)を知っているので、それらを含める必要はありません(つまり、名前を変更すると、すべてのURLは機能します)。また、requestを指定する必要はなく、cfのキーワードを使用する必要もありません(赤みがかったのは古いアプリです)。

ヘルパーに関しては、コントローラー、モデル、またはモジュールでHTMLを作成または操作する必要があるが、通常のHTMLマークアップを使用する必要がある場合(たとえば、2番目の例のように)を表示します。ただし、ビュー内に複雑なHTML構造を構築する必要がある場合は例外です。その場合、通常のHTMLタグをPythonと混ぜるのではなく、単一のPythonコードブロックでヘルパーを操作する方が簡単かもしれません。たとえば、あなたが辞書のリスト内のデータ(キーのF1 'と「F2」、「F3」)を持っており、HTMLテーブルを作成する場合は、あなたが行うことができます:

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

あなたが行うことができます同じことがHTMLとPythonを混在させていますが、それはずっと長くて面倒です。

ヘルパーのもう1つの大きな利点は、あなたのPythonコードで操作できるserver-side DOMを作成することです。モデル/コントローラコードで作成する可能性が最も高いヘルパーは、フォーム(FORM、SQLFORM、Crud、Authシステム経由)とテーブル(SQLTABLE、SQLFORM.grid、Crud経由)です。これらのヘルパー自体には、テーブル、div、ulなどの他のヘルパーが含まれており、HTML(for example)にシリアル化される前にサーバー側で操作できます。

  • A

    はまた、ヘルパーのいくつかは、機能を追加したり、使用しやすいよう、特別な機能持っ<a></a>と同じように、だけでなく、Ajaxのコールバックを処理するための特別の引数を取ります。

  • HTML:自動的にdoctype文字列の前に追加されます。
  • INPUT
  • OPTION:それぞれ、現在の値を設定し、自動的に checkedselected属性を設定処理するために特別な value引数を取ります。
  • OLULSELECTTRTBODY:そのHTMLの対応と同様に、彼らは自動的に適切な子要素(すなわち、<li>にヘルパーではありませんアン名前付き引数(またはリスト/タプルの要素)を変換除き、<option> 、それぞれ<td>および<tr>)。

      :最後

    、機能特化したヘルパーの数がある - (TR()が自動的に別TD年代に個々の要素を変換テーブルの例では、上記事実を使用することはできます。)

  • BEAUTIFY:複合オブジェクトのHTML表現を作成します。
  • CODE:いくつかのプログラミング言語のコードハイライトと行番号を自動的に処理する<pre></pre>の代替品です。
  • MARKMIN:markminコードをHTMLに変換します。
  • MENU:入れ子になったタプルのリストからulを作成します。
  • TAG:ユニバーサルタグジェネレータとHTMLパーサー。
  • XML:エスケープしてはいけない、またはサニタイズする必要のあるテキストをカプセル化します。

詳細については、helpers documentationを参照してください。

+0

これは素晴らしい説明でした。どうもありがとうございました :) –

関連する問題