使用 SQLFORM.grid & request.args

Using SQLFORM.grid & request.args

目前我正在使用 HTML table.

显示数据库中的选定数据

default.py:

def show():
post = db.games(request.args(0))
reviewRows = db(db.reviews.game_id == request.args(0)).select()
return locals()

show.html

{{extend 'layout.html'}}

<h2>{{=post.title}}</h2>

<i>Desc: {{=post.description}}</i>

<h2>Reviews:</h2>
<table class="table">
    <tr>
        <th>Review title</th>
        <th>Review</th>
    </tr>
    {{for row in reviewRows:}}
    <tr>
        <td>{{=row.title}}</td>
        <td>{{=row.review}}</td>
    </tr>
    {{pass}}
</table>

但我想使用 SQL.grid 以便我可以对 table.

进行排序和搜索

我试过了

reviewRows = SQLFORM.grid(db.reviews.game_id == request.args(0)).select()

但这只是将我链接回索引页。我假设它是因为它没有正确接受参数?

default.py:

def index():
    gridHome = SQLFORM.grid(db.games, editable=False, create=False, csv=False, deletable=False, details=False, links = [lambda row: A('View Post',_href=URL("default","show",args=[row.id])), lambda row: A('Review',_href=URL("default","review",args=[row.id]))])
    return locals()

SQLFORM.grid 使用 URL args 来构造它自己的 URLs,所以如果网格动作的基础 URL 已经使用了一个或多个 URL 参数,您必须通过 args 参数指定:

reviewRows = SQLFORM.grid(db.reviews.game_id == request.args(0), args=request.args[:1])

上面告诉网格,它构造的所有内部 URLs 应该包括 request.args[:1] 作为 URL arg,然后再添加它自己的任何 URL args。

此外,请注意,您不应像在示例代码中那样将 .select() 添加到 SQLFORM.grid