我正在使用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
答案 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 }}