2009-05-13 3 views
0

Je travaille sur une application de portefeuille d'image, et j'ai une url qui ressemble à ceci:Django Pagination - allez être redirigé vers la page d'un objet est sur

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

Essentiellement, l'élément page est seulement là je peux donc bien rediriger l'utilisateur vers la page des vignettes d'où ils viennent. Cependant, si l'URL est transmise et que certaines images sont ajoutées ou supprimées avant l'image, il se peut qu'elle ne soit plus sur cette page. Je voudrais rediriger les utilisateurs dans ce cas à:

slug/correctpage/id 

Ce que je ne peux pas travailler est de savoir comment fonctionne ce que la page d'une image est, à l'aide intégrée de Django pagination. Voici ce que j'ai jusqu'à présent:

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 

Je sais que je pouvais parcourir chaque page, mais qui semble que ça va frapper la base de données inutilement, et je suis sûr qu'il doit y avoir une façon plus élégante de fais le.

Merci,

Dom

Répondre

2

Si vous voulez tenir compte des changements de base de données de compte, vous aurez pas d'autre choix que d'interroger la base de données ou ... vous devez quelque part mettre en cache les changements dans la mémoire si vous utilisez juste un serveur web. Ce dernier n'est qu'une option si vous n'avez pas trop de données ou assez de mémoire disponible.

La façon la plus élégante pour interroger quelque chose comme ce qui suit, mais cela est quelque chose de très difficile à réaliser dans Django 1.0 sans utiliser SQL:

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

(où le champ est le champ de champ que vous utilisez pour commander votre images)

Pour utiliser du SQL brut dans Django, vous pouvez lire this page pour plus d'informations.

Ensuite, vous connaissez la position de l'image, et vous pouvez facilement calculer la page l'article se trouve dans.

+1

La version de développement de Django, et la bêta 1.1, support des requêtes globales dans le code ORM, de sorte que vous ne devriez » t besoin de revenir à SQL brut. –

Questions connexes