4.1. SQLTABLE¶
このクラスはDALモジュールではなく、SQLHTMLモジュールに含まれています。 web2py Book では DALの章でSQLTABLEについて触れていますので、このドキュメントでも簡単に解説します。
SQLTABLEはRowsインスタンス渡すと、HTMLのテーブルを作成します。
>>> rows = db(db.person).select()
>>> print SQLTABLE(rows)
<table><thead><tr><th>person.id</th><th>person.name</th></tr></thead><tbody>
<tr class="even"><td>1</td><td>Pacedada</td></tr>
<tr class="odd"><td>2</td><td>Socepopa</td></tr><tr class="even">
<td>3</td><td>Cosotama</td></tr></tbody></table>
Rowsインスタンスをコントローラ関数の return文に渡す、もしくはビューにRowsインスタンスを記述することにより、 自動的にSQLTABLEを呼び出すことが可能です。
コントローラ関数のreturn文にRowsインスタンスを渡した例
def person_list(): rows = db(db.person).select() return dict(rows=rows)ブラウザ画面上のイメージ
![]()
ビュー中に記述することも可能です。
# コントローラ def person_list(): return dict() # コントローラのreturn文に辞書型でパラメータを渡さないとSQLTALBEは呼ばない<!-- ビュー --> {{extend 'layout.html'}} <h1>Person list</h1> {{=db(db.person).select()}} <!-- ビュー内にロジック記述 -->しかしこの書き方は MVC の観点から推奨されません。次のように記述した方がよいでしょう。
# コントローラ def person_list(): rows = db(db.person).select() return dict(rows=rows)<!-- ビュー --> {{extend 'layout.html'}} <h1>Person list</h1> {{=rows}} <!-- Rowsインスタンスの変数を指定 -->もちろん、SQLTABLE コンストラクタを自動でなく、直接呼び出して使用することもできます。
def person_list(): rows = db(db.person).select() table = SQLTABLE(rows) return dict(table=table)
SQLTABLEクラスのコンストラクタは、次のようなパラメータを設定することが可能です。
-
class
SQLTABLE
(sqlrows[, linkto, upload, orderby, headers, truncate, columns, **attributes]) → HTML¶ - sqlrows
- Rowsインスタンスを指定します。
- linkto
レコードを修正する場合のURLを指定します。URL以外に無名関数(lambda)も指定可能です。デフォルトはNoneです。
関数もしくは無名関数を指定する場合、linkto は3つのパラメータを実行時に渡します。それぞれ
field
,type
,ref
です。 リンクがidフィールドの場合、field
にはレコード、type
には ‘table’、ref
にはテーブル名が設定されます。 リンクが参照フィールドの場合、field
にはレコード、type
には ‘reference’、ref
には ‘reference’後に付くフィールドタイプ名が設定されます。def person_list(): rows = db(db.person).select() table = SQLTABLE(rows, linkto=lambda field,type,ref: URL(f='person', args=field)) return dict(table=table)
linkto設定例では無名関数を使って、person関数とレコードidをパラメータにしたURLにリンクするよう指定しています。
- upload
- ファイルをダウンロードするためのURLを指定します。デフォルトはNoneです。
- headers
列名を辞書型で指定できます。デフォルトは空の辞書型です。
この他、headers=”fieldname:capitalize” や headers=”labels” , headers=None などもサポートしています。
- truncate
- 表示フィールド長を制限します。デフォルトは16文字です。
- columns
表示するファイールドをリストもしくは辞書型で指定します。デフォルトはテーブルに含まれるフィールドです。 columns に指定された順にフィールドが表示されます。
仮想フィールド は指定しないと表示されません。
- **attributes
- 出力するtableタグに設定する属性を指定します。
サンプルを示します。
def person_list(): rows = db(db.person).select() col = ['person.name',] return dict(rows = SQLTABLE(rows,columns = col,\ _style = "background-color:skyblue"))
ブラウザ画面上のイメージ