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' object is not iterable

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 に答える