Django.fun

Accessing dataclass properties by name in Django template

In Django, I have created a dataclass to help me move data around in a standardized way:

# models.py
class Person(models.Model):
  name = CharField(max_length=50)

#utils.py
@dataclass
class Performance:
  person: Person
  last_year: int
  five_years: int

The idea here is that I can access the properties by name when transferring them to the template:

#views.py
class IndexView(View):
  def get(self, request):
    persons = Person.objects.filter(name="pam")
    perfs_array = []

    for person in persons:
      p = Performance()
      p.last_year = #some math
      p.five_years = #more math
      perfs_array.append(p)
    
    context = {"perfs": perfs_array}
    return render(...) 

The goal is to be able to do this:

<!--index.html-->
{% for perf in perfs %}
  <h1>{{ perf.person.name }}</h1>
  <p>last year's performance: {{ p.last_year }}</p>
{% endfor %}

However, I can only access the data using numbered indices:

<!--index.html-->
{% for perf in perfs %}
  <h1>{{ perf.0.name }}</h1>
  <p>last year's performance: {{ p.1 }}</p>
{% endfor %}

This made it very hard to write correct code and to debug the templates when things go inevitably south. Is there a way to access the data with named indices?

Thanks!

Tutorials

Константы Python: Улучшение управляемости вашего кода

Современный Python: начинаем проект с pyenv и poetry

Настройка проекта Python — виртуальные среды и управление пакетами

Использование requests в Python — тайм-ауты, повторы, хуки

Понимание декораторов в Python

ProcessPoolExecutor в Python: полное руководство

map() против submit() с ProcessPoolExecutor в Python

Понимание атрибутов, словарей и слотов в Python

Полное руководство по slice в Python

Выпуск Django 4.0

Безопасное развертывание приложения Django с помощью Gunicorn, Nginx и HTTPS

Автоматический повтор невыполненных задач Celery

Django REST Framework и Elasticsearch

Докеризация Django с помощью Postgres, Gunicorn и Nginx

Асинхронные задачи с Django и Celery

Релизы безопасности Django: 3.2.4, 3.1.12 и 2.2.24

Выпуски исправлений ошибок Django: 3.2.3, 3.1.11 и 2.2.23

Эффективное использование сериализаторов Django REST Framework

Выпуски безопасности Django: 3.2.2, 3.1.10 и 2.2.22

Выпущенные релизы безопасности Django: 3.2.1, 3.1.9 и 2.2.21

View all tutorials →