如何仅显示 django 中的最后一个条目?

she*_*sky 0 django django-templates django-models 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>
Run Code Online (Sandbox Code Playgroud)

但我收到错误:“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
Run Code Online (Sandbox Code Playgroud)

Hed*_*ide 5

您还可以实施latest()

Image.objects.latest()
Image.objects.latest('attr')  
Run Code Online (Sandbox Code Playgroud)

在模板中

{{ object_list.latest }}
Run Code Online (Sandbox Code Playgroud)

您可以通过向模型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'
Run Code Online (Sandbox Code Playgroud)

  • 您正在尝试迭代模板中的单个对象,但这是行不通的。这将返回一个对象:`vitrins = Vitrin.objects.all().reverse()[0]`。如果您仍然想在模板中迭代多个对象,为什么首先需要最新的对象? (3认同)
  • 将 `{'vintrin': Vintrin.objects.latest()}` 传递到你的上下文中,并在模板 `{{vintrin }}` 中呈现它 (2认同)