2013-06-29 51 views
1

我有这个在我的模板文件:如何以排序顺序显示项目?

{% get_latest_show as slideshow %} 
{% for slide in slideshow.slide_set.all %} 
<a href="{{slide.target_url}}"><img src="{% thumbnail slide.image 1174x640 upscale %}" alt="{{slide.title}}" width="1174"/></a> 
{% endfor %} 

models.py

from django.db import models 
import datetime 

class Slide(models.Model): 
    title = models.CharField(max_length=50) 
    description = models.TextField(blank=True, null=True) 
    target_url = models.TextField(blank=True, null=True) 
    slideshow = models.ForeignKey('Slideshow') 
    image = models.ImageField(upload_to='slideshow', max_length=500, blank=True,null=True) 

    def __unicode__(self): 
     return self.title 

class Slideshow(models.Model): 
    title = models.CharField(max_length=50) 
    pub_date = models.DateTimeField(auto_now=True) 
    published = models.BooleanField(default=False) 

    class Meta: 
     ordering = ['-title'] 

    def __unicode__(self): 
     return self.title 

slide_tags.py

from django import template 
from django.core.cache import cache 
from django.contrib.contenttypes.models import ContentType 
from slides.models import Slide, Slideshow 

register = template.Library() 

class GetSlideshowNode(template.Node): 
    """ 
    Retrieves the latest published slideshow 
    """ 
    def __init__(self, varname): 
     self.varname = varname 

    def render(self, context): 
     try: 
      show = Slideshow.objects.filter(published=True)[0] 
     except: 
      show = [] 

     context[self.varname] = show 
     return '' 

def get_latest_show(parser, token): 
    """ 
    Retrieves the latest published slideshow 

    {% get_latest_show as show %} 
    """ 
    args = token.split_contents() 
    argc = len(args) 

    try: 
     assert (argc == 3 and args[1] == 'as') 
    except AssertionError: 
     raise template.TemplateSyntaxError('get_latest_show syntax: {% get_latest_show as varname %}') 

    varname = None 
    t, a, varname = args 

    return GetSlideshowNode(varname=varname) 

register.tag(get_latest_show) 

的问题是,我的幻灯片显示出的顺序。当我在页面上打印slideshow.slide.set.all时,看到:

[<Slide: Slide 2>, <Slide: Slide 3>, <Slide: Slide 4>, <Slide: Slide 1>] 

如何获得幻灯片按顺序显示?

回答

0

您希望订购slide_set,因此'排序'声明应在Slide型号上。

class Slide(models.Model): 
    # fields 
    class Meta: 
     ordering = ['-title'] 

这将导致Slide.objects.all()返回由title场订购了查询集。这相当于slideshow.slide_set.all()

+0

感谢您的答复,但我试图把它放在views.py没有运气。我已经用更多的上下文更新了这个问题。文件夹中的views.py为空。 – khwebdesigns

+0

@khwebdesigns我错过了你正在使用模板标签。我上面更新了我的答案。希望它能解决它。 – droidballoon

+0

工作!谢谢@droidballoon !! – khwebdesigns

相关问题