Web2py-ビュー
web2pyフレームワークは Models、 Controllers そして 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 | このヘルパーは、リンクを構築するために使用されます。アンカータグに対応 | |
B | このヘルパーは、テキストの内容を太字にするのに役立ちます。 | |
体 | このヘルパーはページの本文を作成します。また、ブレークの数を増やすための乗算演算子も含まれています。 | |
コード | Python、C、C ++、およびweb2pyコードの構文の強調表示を実行します。このヘルパーには、APIドキュメントをリンクする機能もあります。 | |
FIELDSET | ラベルとともに入力フィールドを作成します。 | |
頭 | HTMLページの<head>タグにタグを付けるのに役立ちます。 | |
IMG | 特定のHTMLページの画像を埋め込むのに役立ちます。 | |
カスタムヘルパー
これらのヘルパーは、要件に従ってタグをカスタマイズするために使用されます。web2pyは以下のカスタムヘルパーを使用します-
鬼ごっこ
web2pyは、ユニバーサルタグジェネレーターとしてTAGを使用します。カスタマイズされたXMLタグの生成に役立ちます。一般的な構文は次のとおりです-
{{ = TAG.name('a', 'b', _c = 'd')}}
XMLコードを次のように生成します:<name c = "d"> ab </ name>
TAGはオブジェクトであるTAG.name
かTAG['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>
出力は次のようになります-