Получить первый элемент QuerySet в шаблоне

17

В моем приложении для блога я хочу отобразить список сообщений в блогах и первое изображение, связанное с этим сообщением. Теперь я делаю это так:

{% for image in entry.image_set.all|slice:"1" %}
    <img src="{{ image.get_absolute_url }}">
{% endfor %}

Есть ли ярлык шаблона, о котором я не знаю, или, может быть, я должен просто написать свой собственный менеджер?

    
задан vorpyg 19.08.2010 в 11:49
источник

2 ответа

40

Не короче, но вы можете использовать first :

{% with entry.image_set.all|first as image %}
  <img src="{{ image.get_absolute_url }}">
{% endwith %}
    
ответ дан Dominic Rodger 19.08.2010 в 12:02
источник
  • Спасибо. Он немного чище и «чувствует» себя лучше. Есть ли какая-либо разница вычислительно? –  vorpyg 19.08.2010 в 12:09
  • @voypyg - я бы проверял, что он фактически не извлекает все из базы данных - посмотрите на выполненный SQL. –  Dominic Rodger 19.08.2010 в 12:25
  • Похоже, что оба фильтра активируют предложение SQL LIMIT. –  vorpyg 19.08.2010 в 13:12
3

С Django 1.6 вы можете сделать

<img src="{{ entry.image_set.first.get_absolute_url }}">
    
ответ дан Francisco Couzo 25.04.2016 в 00:55
источник