2014-11-07 1 views
2

У меня есть мнение, содержащий код, чтобы получить все объекты обзора для фильма:Как выполнить цикл запроса Django в html-файле?

review = Review.objects.filter(movie= movie) 

Как я могу перебрать эти значения в HTML, так что я получаю только первый 3 объекта обзора? Индексирование, подобное обзору [0], похоже, не работает.

я видел в другом посте, что вы можете перебрать все объекты в HTML, как это (но это не то, что я ищу):

{% for obj in review %} 
    <p> {% obj.review_text %} </p> 
{% endfor %} 

ответ

2

Почему бы просто не получить первые 3 элемента только в вашем представлении и только вернуть их в контекст? Похоже, это было бы самым простым решением.

first_3_reviews = Review.objects.filter(movie= movie)[:3] 

В качестве альтернативы, вы можете использовать счетчик forloop (см: https://docs.djangoproject.com/en/dev/ref/templates/builtins/#for) отображать только первые 3 элемента:

{% for obj in review %} 
    {% if forloop.counter < 3 %} 
    <p> {% obj.review_text %} </p> 
    {% endif %} 
{% endfor %} 
+0

Этот ответ велик и работает. Я согласен с тем, что это должно быть сделано в представлении. Спасибо за эти решения. –

+0

Если вы не возражаете, я спрашиваю, как бы вы решили отфильтровать последние 3 элемента вместо первого. 3. Я попробовал обзор = Review.objects.filter (movie = movie) .reverse() [: 3]. Это не сработало –

+0

Чтобы получить последние три элемента, вам необходимо сначала отфильтровать запрос. Дефис до «-id» важен и упорядочивает запрос в порядке возрастания. Это код, который я использовал: review = Review.objects.filter (movie = movie) .order_by ('- id') [: 3] –

1

попробуйте использовать

{% for obj in review %} 
<p> {{% obj.review_text %}} </p> 
{% endfor %}  

это даст вам возможность использовать ваш объект легко

+0

Это не касается моего вопроса. Я включил этот код в мой исходный пост –

1
{% for obj in review[-3:] %} 

это извлекает последние 3 пунктов в обзоре

+0

, этот код не работает для меня. Это дает мне ошибку рендера –

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