2016-04-29 4 views
0

Momentan zeige ich ausgewählte Daten in einer Datenbank mit einer HTML-Tabelle an.Verwendung von SQLFORM.grid & request.args

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> 

Aber ich möchte eine SQL.grid verwenden, so dass ich & die Tabelle suchen sortieren.

Ich habe

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

Aber das verbindet mich nur zurück auf die Index-Seite. Ich nehme an, weil es das Argument nicht richtig nimmt?

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() 
+0

Sie erwähnen etwas über die Verbindung zurück zur Indexseite und haben dies mit web2py getaggt. Können Sie Ihre Routing-Funktion teilen? Entschuldigungen - Ich habe web2py nicht verwendet, aber ich sehe nicht, wo dies Weiterleitungen durchführen würde. –

+0

Ich habe meinen gesamten Code zur Frage hinzugefügt. Es ist nicht gemeint, mich zurück zu der Indexseite zu verknüpfen, die Idee ist, dass wenn ich auf "Produkt anzeigen" klicke, eine Seite geladen wird, die ein SQL.grid enthält, das Rezensionen für das ausgewählte Produkt anzeigt. Im Moment verwende ich eine einfache HTML-Tabelle, die gut funktioniert. – Gareth

Antwort

1

SQLFORM.grid verwendet die URL args seine eigene URLs zu konstruieren, so dass, wenn die Basis-URL des Gitters Aktion bereits verwendet man oder mehrere URL args, müssen Sie dies angeben, über die args Argument:

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

Das sagt oberhalb des Rostes, dass alle internen URLs sollte request.args[:1] als URL-Arg-Konstrukte umfassen, bevor eine eigene URL args hinzugefügt wird.

Beachten Sie auch, dass Sie .select() nicht zu SQLFORM.grid hinzufügen sollten, wie Sie in Ihrem Beispielcode haben.

+0

Das hat funktioniert! Danke noch einmal! – Gareth