1

I have this in my template file:

{% 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)

The problem is that my slides are being displayed out of order. When I print slideshow.slide.set.all on the page, I see:

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

How do I get the slides to appear in order?

4

1 回答 1

0

您希望slide_set为此订购“订购”声明应该在Slide模型上。

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

这将导致Slide.objects.all()返回按title字段排序的查询集。这相当于slideshow.slide_set.all()

于 2013-06-29T18:33:40.563 回答