Python Django html templating

Я создаю веб-портфолио для альбомов фотографий и других функций, но html-шаблоны немного запутанны для меня, у меня есть несколько различных вопросов, связанных с этой темой. Вот мои модели:

class Album(models.Model):
    title = models.CharField(max_length=150)
    date_init = models.DateField("From", default=date.today)
    date_end = models.DateField("To", default=date.today)
    album_cover = models.ForeignKey('Photo', null=True, blank=True, on_delete=models.RESTRICT, related_name='Album')

class Photo(models.Model):
    image = models.ImageField(upload_to="photos/")
    alt_text = models.CharField(max_length=100)
    album = models.ForeignKey(Album, on_delete=models.CASCADE, related_name='photos')
    tags = TaggableManager(blank=True)

1- У меня есть Navbar в base.html :

{% block sidebar %}
...
<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
  <li><a class="dropdown-item" href="#">2021</a></li>
  <li><hr class="dropdown-divider"></li>
  <li><a class="dropdown-item" href="#">2018</a></li>
  <li><a class="dropdown-item" href="#">2014</a></li>
...
{% endblock %}
</ul>

Моя идея состоит в том, чтобы показывать только те годы, для которых в базе данных сохранен хотя бы один альбом (например, исключить 2020 и 2019, потому что там нет данных). Но моя проблема в том, что этот код находится в base.html, который я распространяю повсюду. Я знаю, что могу изменить его с помощью {% block sidebar %}, но эта информация должна быть во всех шаблонах. Если я прав, я не могу отправлять данные в base.html для заполнения списка? Есть ли способ добиться этого без копирования/вставки кода во все html шаблоны? Если нужно, мой запрос к базе данных :

Album.objects.dates('date_init', 'year')

2/ В моей галерее все альбомы показаны с множественной информацией :

<main>
  <div class="album py-5 bg-light">
    <div class="container">
      <div class="row row-cols-1 row-cols-sm-2 row-cols-md-3 g-3">
        {% if data %}
        {% for album in data %}
        <div class="col">
          <div class="card shadow-sm h-100">
            <div class="card-header h-100">
              <a href="{% url 'album' album.id %}"><img src="{{ album.album_cover.image.url }}" class="img-fluid img-thumbnail card-img-top thumbnail-bg-dark"/></a>
              </div>
            <div class="card-body">
              <h8 class="card-title"><a href="{% url 'album' album.id %}">{{album.title}}</a></h8>
              <p class="card-text"><em><small class="text-muted">
                {% if album.tags_list|length %}
                  {{album.tags_list.all|join:", "}}
                {% else %}
                <del>No tags added</del>
                {% endif %}
              </small></em></p>
            </div>
            <div class="card-footer">
              <div class="d-flex justify-content-between align-items-center">
                {% if album.num_photos > 1 %}
                <small class="text-muted"><em>{{ album.num_photos }} photos</em></small>
                {% else %}
                <small class="text-muted text-start"><em>{{ album.num_photos }} photo</em></small>
                {% endif %}
                <small class="text-muted text-end"><em>{{ album.date_init }}</em></small>
              </div>
            </div>
          </div>
        </div>
        {% endfor %}
        {% endif %}
      </div>
    </div>
  </div>

</main>

Пример изображения : enter image description here

  • Я хочу, чтобы изображения были выровнены по центру верхней карточки, даже если у них разное соотношение (правое должно быть немного ниже), но не знаю, как это сделать (пробовал vertical-align и другие штуки). Мне нужно выровнять все элементы (заголовок, теги, фотографии и дату можно).
  • .
  • Также для тегов, возможно ли добавить ссылку href для каждого тега с подобной конструкцией (фактически это только текст)?
  • .
  • И ограничить количество тегов до 1 строки текста и при необходимости заменить конец на "..." ? Для этой страницы мой запрос выглядит так :
albums = Album.objects.order_by('-date_init').annotate(num_photos=Count('photos'), year=ExtractYear('date_init'),)

    for album in albums:
        tag_lists = Tag.objects.filter(photo__album=album).distinct().annotate(num_tags=Count('slug')).order_by('-num_tags')
        album.tags_list = tag_lists
        print(album.tags_list)

Мне было трудно найти примеры или объяснения по шаблонированию html на python, и я не нахожу этот язык легким для понимания, так что если у вас есть хорошие учебники или уроки, это может быть полезно :) Спасибо за помощь и счастливого Рождества!

Вернуться на верх