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)

ブラウザ画面上のイメージ

../../_images/web2py_dal_022r.JPG

ビュー中に記述することも可能です。

# コントローラ
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"))

ブラウザ画面上のイメージ

../../_images/web2py_dal_023r.JPG

参考: Serializing Rows in ViewsビューにおけるRowsのシリアライズ