2009-05-13 5 views
0
私は画像のポートフォリオアプリに取り組んでいます

上にあるページへのリダイレクト、私はこのようになりますURLを持っている:基本的にジャンゴページネーション - オブジェクトが

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

は、page要素があるだけでそこで私はユーザーが元に戻ったサムネイルのページにリダイレクトすることができます。ただし、URLが渡されてイメージの前にイメージが追加または削除されると、そのイメージはそのページに存在しなくなる可能性があります。私がうまくできませんがDjangoの組み込みのページネーションを使用して、画像が上にあるどのページアウト操作する方法である

slug/correctpage/id 

:私はにその場合のユーザーをリダイレクトしたいと思います。ここで私はこれまで持っているものです:

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 

私は各ページを反復可能性を知っているが、それは不必要にデータベースをヒットしますようそれはそうと、私はよりエレガントな方法がなければならないと確信していますそれをやる。

おかげで、

ドム

答えて

2

アカウントデータベースの変更に撮りたい場合は、データベースを照会することよりも、他の選択肢を持っていないでしょうかあなたが使用している場合...あなたはメモリ内の変更をキャッシュのどこかでなければなりませんただ1つのウェブサーバー。後者は、あまりにも多くのデータや十分なメモリを使用できない場合にのみオプションです。

次のようなものを照会するための最もエレガントな方法は、これはSQLを使用せずにDjango 1.0で実現することは非常に困難なものである:

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

(フィールドは、フィールドのフィールドです、あなたを注文するために使用画像)

Djangoで生のSQLを使用するには、this pageを参照してください。 「

は、次に、あなたのイメージの位置を知って、あなたは簡単にアイテムが入っているページを計算することができます。

+1

のDjangoの開発版、および1.1ベータ、ORMのコードで集計クエリをサポートするので、あなたはするべきでありません生のSQLに戻す必要はありません。 –