2009-05-13 11 views
0
ist

Ich bin auf ein Bild Portfolio App arbeiten, und ich habe eine URL bekam, die wie folgt aussieht:Django Paginierung - Umleiten auf der Seite ein Objekt auf

url(r'^(?P<slug_val>[-\w]+)/(?P<page>[0-9]+)/(?P<id>[0-9]+)/$', 'portfolio.views.imagedetail') 

Im Wesentlichen das page Element nur Dort kann ich den Benutzer auf die Seite der Thumbnails, aus der er gekommen ist, zurückleiten. Wenn die URL jedoch weitergegeben wird und einige Bilder vor dem Bild hinzugefügt oder entfernt werden, befindet es sich möglicherweise nicht mehr auf dieser Seite. Ich mag Benutzer in diesem Fall umleiten:

slug/correctpage/id 

Was ich nicht herausfinden kann, ist, wie herauszufinden, was Seite ein Bild auf ist, mit Django eingebauten in Paginierung. Hier ist, was ich bisher habe:

def imagedetail(request, slug_val, page, id): 
    p = get_object_or_404(MyPortfolio, slug=slug_val) 

    paginator = Paginator(p.images.all(), 25) 

    # find out which page the image with id is on, if it's not page, 
    # then redirect, otherwise render 

Ich weiß, dass ich durch jede Seite laufen könnte, aber das scheint, wie es die Datenbank unnötig getroffen werden, und ich bin sicher, es muss eine elegantere Art und Weise sein, TU es.

Danke,

Dom

Antwort

2

Wenn Sie berücksichtigen Datenbankänderungen zu übernehmen wollen, werden Sie keine andere Wahl haben, als die Datenbank abfragen oder ... Sie müssen cachen irgendwo die Änderungen im Speicher, wenn Sie verwenden nur ein Webserver. Letzteres ist nur eine Option, wenn Sie nicht zu viele Daten oder genügend Speicher zur Verfügung haben.

Die eleganteste Art und Weise so etwas wie die folgenden zu fragen, aber das ist etwas sehr schwierig, in Django 1.0 zu erreichen, ohne SQL zu verwenden:

SELECT COUNT(*) + 1 FROM images WHERE images.field < currentfield 

(wo Feld das Feld des Feldes ist, dass Sie verwenden für die Bestellung Ihres Bilder)

Um Raw SQL in Django zu verwenden, können Sie this page für weitere Informationen lesen.

Dann kennen Sie die Position Ihres Bildes, und Sie können die Seite leicht ausrechnen, das Element in ist.

+1

Die Entwicklerversion von Django und die 1.1 beta, Aggregatabfragen in ORM Code unterstützen, so dass Sie shouldn‘ t müssen auf Raw SQL zurückfallen. –

Verwandte Themen