Web2py-ビュー

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

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

  • HTMLドキュメントに埋め込まれたPythonコードのエスケープ。
  • Pythonに基づくインデントに続いて、HTMLルールに影響を与える可能性があります。

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

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

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

Note − passはPythonキーワードであり、web2pyキーワードではありません。

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

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

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

  • Positional 引数は、HTMLのopenタグとcloseタグの間に含まれるオブジェクトとして解釈されます。

  • Named アンダースコアで始まる引数は、HTMLタグとして解釈されます。

ヘルパーは、文字列のシリアル化にも役立ちます。 _str_およびxmlメソッド。例-

>>> print str(DIV(“hello world”))

出力

<div> hello world </div>

Note − HTMLヘルパーは、ドキュメントオブジェクトモデル(DOM)のサーバー側表現を提供します。

XMLヘルパー

XMLはオブジェクトと呼ばれ、エスケープしてはならないテキストをカプセル化します。テキストには、有効なXMLが含まれる場合と含まれない場合があります。

たとえば、以下のコードの場合、JavaScriptを含めることができます。

>>> print XML('<script>alert("unsafe!")</script>')

出力

<script> alert(“unsafe!”)</script>

ビルトインヘルパー

web2pyで使用される多くの組み込みヘルパーがあります。HTML組み込みヘルパーの一部を以下に示します。

名前 使用法
A このヘルパーは、リンクを構築するために使用されます。アンカータグに対応
[
(A('Home', _href = URL('default', 'home')), False, None, []),
...]
B このヘルパーは、テキストの内容を太字にするのに役立ちます。
B('<hello>', XML('<i>world</i>'), _class = 'test', _id = 0)
このヘルパーはページの本文を作成します。また、ブレークの数を増やすための乗算演算子も含まれています。
BR()
コード Python、C、C ++、およびweb2pyコードの構文の強調表示を実行します。このヘルパーには、APIドキュメントをリンクする機能もあります。
CODE('print "hello"', language = 'python').xml()
FIELDSET ラベルとともに入力フィールドを作成します。
FIELDSET('Height:', INPUT(_name = 'height'), _class = 'test')
HTMLページの<head>タグにタグを付けるのに役立ちます。
HEAD(TITLE('<hello>'))
IMG 特定のHTMLページの画像を埋め込むのに役立ちます。
IMG(_src = 'http://example.com/image.png',_alt = 'test')

カスタムヘルパー

これらのヘルパーは、要件に従ってタグをカスタマイズするために使用されます。web2pyは以下のカスタムヘルパーを使用します-

鬼ごっこ

web2pyは、ユニバーサルタグジェネレーターとしてTAGを使用します。カスタマイズされたXMLタグの生成に役立ちます。一般的な構文は次のとおりです-

{{ = TAG.name('a', 'b', _c = 'd')}}

XMLコードを次のように生成します:<name c = "d"> ab </ name>

TAGはオブジェクトであるTAG.nameTAG['name']、一時的なヘルパークラスを返す関数です。

メニュー

このヘルパーは、リスト項目またはメニュー項目の値のリストを作成し、メニューを表すツリーのような構造を生成します。メニュー項目のリストは次の形式になっています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>

ページレイアウト

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

例- “index.html” に拡張 “layout.html” 含めることができます “menu.html” これには、 “header.html”

{{extend 'layout.html'}}
<h1>Hello World</h1>
{{include 'page.html'}}

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

デフォルトでは、web2pyのビューには次のものが含まれます layout.html そして index.html、データを表示するセクション全体を定義します。

{{extend 'layout.html'}}
<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>

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