@Ganki
Coding

Как получить картинки из всех альбомов и передать их в шаблон jinja?

Как вывести по 3 картинки из каждого альбома и передать их в шаблон jinja?

Не могу понять как составить запрос SQLAlchemy.

Пути:

# routes.py

from app.models import User, Album, Image
from flask import render_template


@app.route('/')
def index():
    albums = Album.query.order_by(Album.timestamp.desc()).all()
    return render_template('index.html', albums=albums)


Модель базы данных:

# models.py

from app import db
from datetime import datetime


class Album(db.Model):
    __tablename__ = 'albums'
    id = db.Column(db.Integer, primary_key=True)
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    images = db.relationship('Image', backref='album', lazy='dynamic')


class Image(db.Model):
    __tablename__ = 'images'
    id = db.Column(db.Integer, primary_key=True)
    image_filename = db.Column(db.String)
    image_url = db.Column(db.String)
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    album_id = db.Column(db.Integer, db.ForeignKey('albums.id'))


Шаблон:

# index.html

{% extends "base.html" %}

{% block app_content %}
  <h1>Albums</h1>
  {% for album in albums %}
      Id: {{ album.id }}

      ............................

  {% endfor %}
{% endblock %}


Хочу чтобы так отобразилось в браузере:

5c5aece1afaf4638044107.pngДополнения:

Частично удалось решить проблему, извенив файл шаблона "index.html":

{% extends "base.html" %}

{% block app_content %}

  {% for album in albums %}
    <h1>Album ID: {{ album.id}}</h1>
    {% for photo in album.images %}
      {{ photo.image_url }} <br>
    {% endfor %}
  {% endfor %}

{% endblock %}


Но на странице выводятся все картинки, всех альбомов. А нужно чтобы выводило только первые 3 картинки у каждогото альбома, также чтобы альбом не выводился если в нем нет фотографий.
  • Вопрос задан
  • 152 просмотра
Решения вопроса 1
skipirich
@skipirich
проходил мимо
{% for album in albums %}
{% if album %}
Album ID: {{ album.id}}
{% for photo in album.images %}
{% if loop.index < 4 %}
{{ photo.image_url }}
{% endif %}
{% endfor %}

{% endif %}
{% endfor %}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@pcdesign
Если хотите одним запросом вытащить и альбомы и картинки, то примерно так:

q = db.session.query(Album,  Image).join(Image).filter(Album.id==Image.album_id)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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