2010-10-27 4 views
2

J'ai une vue qui affiche des informations sur l'objet lorsque l'URL correcte est fournie, mais je voudrais créer une vue similaire qui renvoie les informations de l'URL de l'enregistrement qui se trouve à côté. Donc, pour l'essentiel, prenez l'information de ma première vue, liste/commande d'une certaine manière de préférence par date et retourne les enregistrements situés à côté et précédent dans la liste.Comment créer une vue qui renvoie l'objet suivant dans une liste donnée? code inclus

Quelqu'un peut-il m'expliquer et donner un exemple simple de la façon dont je le ferais. Je suis nouveau à Django et je suis coincé. Toute aide est grandement appréciée. Merci.

Voici les modèles URL et des vues que j'ai utilisé

Modèle

class Body(models.Model): 
    type = models.ForeignKey(Content) 
    url = models.SlugField(unique=True, help_text='') 
    published = models.DateTimeField(default=datetime.now) 
    maintxt = models.CharField(max_length=200) 

Voir

def news_view(request, url): 
    news = get_object_or_404(Body, url=url) 
    next = news.get_next_by_published().get_absolute_url() 
    return render_to_response('news/news_view.html', { 
     'news': news, 
     'next': next 
    }, context_instance=RequestContext(request)) 

URL

url(r'^/(?P<url>[\w\-]+)/$', 'news_view', name="news_view"), 

Modèle

<a href="{{ next.get_absolute_url }}">Next</a></p> 
+0

# 1 : changer 'url' en 'slug', parce que s ce que c'est. –

Répondre

2

ajouter get_absolute_url à votre modèle

class Body: 
    #[....] 
    def get_absolute_url(self): 
     return "/%i/" % self.url # but please rename it to slug 

obtenir l'URL suivante dans la vue (avec get_next_by_FOO)

def news_view(request, url): 
    #[....] 
    try 
     next_url = news.get_next_by_published().get_absolute_url() 
    except Body.DoesNotExist 
     next_url = None 
    return #[....] and include next_url 

utiliser cette next_url dans votre modèle

{% if next_url %} 
<a href="{{next_url}}">next</a> 
{% endif %} 
+0

Comment limiter la vue afin qu'elle n'élève pas une requête qui n'existe pas et génère ensuite une erreur? – Stu

+0

En fait, je ne comprends pas votre commentaire. Mais je pense que la réponse est: "essayez .... sauf Body.DoesNotExist" et là, vous définissez next_url à None. Et dans le modèle, vous vérifiez si son ensemble. –

+0

Peut-être que vous pouvez même faire tout simplement dans le modèle .... –

Questions connexes