我怎样才能在django中显示最后一个条目?

时间:2013-05-18 09:29:24

标签: django django-models django-templates django-views

我正在使用Django 1.5.1。我的第一页顶部有一个ImageModel 如何仅显示此模型的最后一个条目?

#model.py
    class Vitrin(models.Model):
        title = models.CharField(max_length=200)
        image = models.ImageField(upload_to = 'images/vitrin/')
        date_created = models.DateTimeField(auto_now=True)  

#views.py
def index(request):
    categories = Category.objects.all()[:5]
    pages = Page.objects.all()[:5]
    vitrins = Vitrin.objects.all().reverse()[0]
    return render(request, 'gallery/index.html', {'categories': categories, 'pages':pages, 'vitrins': vitrins})   

#index.html
    <div class='vitrin'>
            {% for vitrin in vitrins %}
                <img src="{{ vitrin.image.url|last }}" height="550">
            {% endfor %}
    </div>

但我收到错误:'Vitrin'对象不可迭代

Request Method: GET
Request URL:    http://localhost:8000/
Django Version: 1.5.1
Exception Type: TypeError
Exception Value:    
'Vitrin' object is not iterable
Exception Location: /usr/local/lib/python2.7/dist-packages/django/template/defaulttags.py in render, line 147

3 个答案:

答案 0 :(得分:4)

您还可以实施latest()

Image.objects.latest()
Image.objects.latest('attr')  

在模板中

{{ object_list.latest }}

您可以通过向模型Meta类添加属性来实现它:

class Image(models.Model):
    date_created = models.DateTimeField(auto_now=True)
    # other attrs

    class Meta:
        app_label = '<app_name>'
        get_latest_by = 'date_created'

答案 1 :(得分:3)

在视图代码中:

Image.objects.all().reverse()[0]

在模板中:

{{ images|last }}

<强>更新

这应该有效:

<div class='vitrin'>
    {% with vitrins|last as last %}
        <img src="{{ last.image.url }}" height="550">    
    {% endwith %}    
</div>

答案 2 :(得分:-1)

我试图在我的模板中迭代一个对象,这导致了错误。这将返回一个对象:vitrins = Vitrin.objects.all().reverse()[0]
我应该将{'vintrin': Vintrin.objects.latest()}传递到我的上下文中,并将其呈现在模板{{ vintrin.image.url }}