0

我正在使用 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
4

3 回答 3

5

您还可以实现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'
于 2013-05-18T10:18:47.163 回答
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>
于 2013-05-18T09:41:12.343 回答
-1

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

于 2013-05-18T16:50:07.670 回答