Web2py-views

提供:Dev Guides
移動先:案内検索

Web2py-ビュー

web2pyフレームワークは、アプリケーションで ModelsControllers および Views を使用します。 適切なPythonの使用に課される制限なしに、より読みやすいコードのために Views にわずかに変更されたPython構文が含まれています。

web2py View の主な目的は、PythonコードをHTMLドキュメントに埋め込むことです。 ただし、次のようないくつかの問題に直面しています-

  • HTMLドキュメントに埋め込まれたpythonコードのエスケープ。
  • Pythonに基づいたインデントに従うと、HTMLルールに影響する場合があります。

問題を回避するために、web2pyはビューセクションで区切り文字\ {\ {..}}を使用します。 区切り文字は、埋め込まれたpythonコードのエスケープに役立ちます。 また、インデントのHTMLルールに従うのに役立ちます。

*\ {\ {..}}* 区切り文字に含まれるコードには、意図しないPythonコードが含まれています。 Pythonは通常インデントを使用してコードブロックを区切るため、デリミター内の意図しないコードは適切な方法で維持する必要があります。 この問題を克服するために、web2pyは*“ pass” *キーワードを使用します。

行で始まるコードブロックはコロンで終わり、パスで始まる行で終わります。

注意-パスはPythonのキーワードであり、web2pyのキーワードではありません。

次のコードは、パスキーワードの実装を示しています-

{{
   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> タグに対応するヘルパーです。 HTMLアンカー <a> タグをプログラムで構築します。

HTMLヘルパーは、 positional 引数と named 引数の2つのタイプで構成されています。

  • Positional 引数は、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組み込みヘルパーの一部を以下にリストします。

Name Usage Example
A This helper is used to build links. It corresponds to the anchor tag
[
(A('Home', _href = URL('default', 'home')), False, None, []),
...]
B This helper helps in making the contents of the text, bold.
B('<hello>', XML('<i>world</i>'), _class = 'test', _id = 0)
BODY This helper makes the body of a page. It also includes a multiplication operator to increase the number of breaks.
BR()
CODE It performs syntax highlighting for Python, C, CPLUSPLUS and web2py code. This helper also has the ability to link an API documentation.
CODE('print "hello"', language = 'python').xml()
FIELDSET It creates an input field together with its label.
FIELDSET('Height:', INPUT(_name = 'height'), _class = 'test')
HEAD It helps in tagging <head> tag of an HTML page.
HEAD(TITLE('<hello>'))
IMG It helps in embedding images for the given HTML page.
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({"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をレンダリングするための検索要素を提供します。

*element* は、指定された条件に一致する最初の子要素を返します。 一方、 *elements* は、一致するすべての子のリストを返します。 両方とも同じ構文を使用します。

これは、次の例で実証することができます-

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>

ページレイアウト

ビューは、出力をエンドユーザーに表示するために使用されます。 他のビューも含めるだけでなく、拡張することもできます。 これにより、ツリーのような構造が実装されます。

例-「indexl」*は「layoutl」に拡張され、これには「menul」を含めることができ、次に「 headerl」*を含めることができます。

{{extend 'layoutl'}}
<h1>Hello World</h1>
{{include 'pagel'}}

前の章では、会社モジュール用のモデルとコントローラーを作成しました。 次に、データの表示のレンダリングに役立つビューの作成に焦点を当てます。

デフォルトでは、web2pyのビューには layoutlindexl が含まれ、データを表示するセクション全体を定義します。

{{extend 'layoutl'}}
<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>

出力は次のようになります-

ビュー作成