2013-05-18 2 views
0

Я использую Django 1.5.1. У меня есть ImageModel для первой страницы.
Как я могу показать только последний вход этой модели?Как я могу показать только последнюю запись в django?

#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 не 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 

ответ

-1

Я пытался для итерации одного объекта в моем шаблоне, который вызвал ошибку. Это возвращает один объект: vitrins = Vitrin.objects.all().reverse()[0]
я должен пройти {'vintrin': Vintrin.objects.latest()} в мой контекст и сделать его в шаблоне {{ vintrin.image.url }}

3

В видовом код:

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

В шаблоне:

{{ images|last }} 

Update:

Это должно работать:

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

он не работает для меня, я обновил свой вопрос более подробно. – sheshkovsky

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' 
+0

Я обновил свой вопрос более подробно, не могли бы вы проверить? – sheshkovsky

+3

Вы пытаетесь выполнить итерацию одного объекта в своем шаблоне, который не будет работать. Это возвращает один объект: 'vitrins = Vitrin.objects.all(). Reverse() [0]'. Почему вам нужен последний объект в первую очередь, если вы все еще хотите перебирать несколько объектов в шаблоне? –

+0

Мне просто нужна последняя запись (vitrin.image), отображаемая на странице index.html, а не несколько элементов. Что мне делать? – sheshkovsky

Смежные вопросы