@PiggyPig

Почему не отображается изображение при .values()?

views.py
def article(request, c_name):
    context = {
        'page_img': Article.objects.filter(category=c_name).values('image').first()
        # ...
    }
    return render(request, 'app/page.html', context)


page.html
...
<img src="{{ page_img.image.url }}">
...


Другое текстовое поле модели заработало бы, а вот с изображением какая-то ерунда.
Как ни пробовал - не понимаю, как заставить работать.
  • Вопрос задан
  • 180 просмотров
Пригласить эксперта
Ответы на вопрос 1
@deliro
values('image') вернёт тебе то, что должен — значение поля в БД. А это относительный URL картинки.
{'page_url': Article.objects.filter(category=c_name).values('image').first()['image']}
...
<img src="{{ page_url }}">
...

Вот так заработает. Но лаконичней написать будет так:
{'page_url': Article.objects.filter(category=c_name).values_list('image', flat=True).first()}
...
<img src="{{ page_url }}">
...


P.S. Причина, по которой предпочтительно юзать values/values_list перед only (конечно, при условии, что нужны только значения, а не объект модели):
str(Photo.objects.values('image').query)
Out[7]: 'SELECT "catalog_photo"."image" FROM "catalog_photo" ORDER BY "catalog_photo"."position" ASC'
str(Photo.objects.only('image').query)
Out[8]: 'SELECT "catalog_photo"."id", "catalog_photo"."image" FROM "catalog_photo" ORDER BY "catalog_photo"."position" ASC'
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы