⟵back

Notes from DjangoCon Europe 2025

This year, DjangoCon Europe was held in Dublin and I attended remotely, which suited me just fine (though a little birdie says next year it will take place muuuch closer to home, so I will almost certainly attend in person). The remote event was hosted on Venueless and honestly, props to the DjangoCon EU team for making it so good for us. Any issues and ideas posted in the chat were responded to promptly. Not just technical problems; it was heartwarming to see how our suggestions were implemented (e.g. checking our chat for questions to the speakers, customising link text colour for accessibility, adding Celtic folk music to the waiting screen between talks)!

Disclaimer: I wasn't able to watch all the talks and I didn't always make notes for the ones I did watch. Also, you will notice there were also some notes that are slightly incomplete, or that I forgot who said it — sorry about that! The talks should be up on YouTube soon, though.

Haki Benita, 'How to Get Foreign Keys Horribly Wrong in Django'

Not directly related to the topic, but here's something I wanted to note: if for example or mock purposes you want to create one or more objects with a text element, django.utils.lorem_ipsum can help!

from django.utils import lorem_ipsum

for i in range(11):
    BlogPost.objects.create(
        title=f"Blog Post #{i}",
        body=lorem_ipsum.words(100)
    )

Carlton Gibson, 'How We Make Decisions in Django'

As a former Django fellow and a well-respected name in the Django community, he had a lot of wisdom to impart — specifically, about a consensus-based model of teamwork in the Django core team. These are some of the tenets (wasn't able to make exhaustive notes):

  1. Consensus as trust: consensus doesn't mean everyone always has to agree; it means you can be confident that your viewpoint was adequately considered

  2. Consensus as reciprocity: new members take more than they give, as they will need more help, but will eventually pay it forward

  3. Consensus as norms: the constants in which decisions are made

  4. Consensus as contexts: the frameworks in which decisions are made

  5. In terms of team sizes where this model works: '6 people starts to get big, 10 is too many' / 'Ever been in a meeting with 13 people? What was the point of that'

  6. If companies can give more engineering time to Django (i.e. through their developers contributing to the project) that would be valuable

  7. Django works really hard on backwards compatibility!

Mykalin Jones, 'Supporting Adult Career Switchers: The Unbootcamp Method'

For obvious reasons, I was really excited about this talk and happy to see the topic get some visibility.

  1. 'Friends don't let friends make pie charts'

  2. Bootcamps neglect to go over what students will need for technical interviews

  3. There is a problem with getting students to retain info from bootcamps

  4. Coding isn't for everyone, so they need to make sure they know they will like this career switch

  5. Find good, robust material to help people learn to code

  6. Learning to code = you have to like reading and learning

  7. Best way to learn is get your hands dirty

  8. The most successful career switchers are the ones who think: what can I do in my current job to incorporate programming?

  9. Consider: what problem do you want to solve & why do you want to learn programming?

  10. Python is close to (English) natural language — ideal for teaching to children

  11. You have to give students fully-formed learning content and contextualise it. Just sending links doesn't work!

  12. Avoid saying "why don't you just ______"

  13. Flexibility is awesome but it has to be balanced with accountability

  14. Flip the classroom!

  15. Less planning, more doing

  16. CBT (cognitive behavioural therapy) is actually a good basis to go off in a learning environment. The more you do a thing, especially if it's rewarding, the more you'll want to do it. So go for "let's repeat that" and not "you need to study 10 hours week"

  17. Break goals down into actionable sizes

  18. Create social accountability and undeniable evidence of advancement from the start

  19. Create a chain of successes that motivate students to chase the next success

  20. Error messages are our friends! Don't head to ChatGPT!

  21. Curiosity mindset

  22. If you can't handle being wrong, the code is probably not gonna lie

  23. Students say they want to code, but in a lot of cases, actually they just want to be tech-literate

Graham Knapp, 'Feature Flags: Deploy to some of the people all of the time, and all of the people some of the time!'

  1. Django Waffle is a good package for deploying feature flags

  2. Use cases: deploy to different user groups, e.g. superusers, staff

Jacob Walls, 'Dynamic models without dynamic models'

Arches is a framework for cultural heritage data sites focused on geospatiality.

Vince Salvino, 'One Thousand and One Django Sites'

  1. Low-traffic sites don't require Kubernetes — a use case for it would be a TV streaming site to increase the number of workers to match the traffic when a new episode of The White Lotus drops. Essentially it "repeats" the site.

  2. A Wagtail site can be destroyed with repeated 404s (caused by expensive operations to scan the database) — bots carrying out DDoS attacks attempt to reach /xmlrpc.php, which is specific to Wordpress.

  3. For CodeRed customers, 60% of DDoS traffic has come from Meta AI training!!!

  4. ./manage.py can be abused for code injections.

Agnès Haasser, 'Europe, Django and two-factor authentication'

  1. DATA SAFETY = PEOPLE SAFETY. This is what GDPR is really about — not cookie banners or legal obligations, but ethics.

  2. What parts of someone's data are immutable and therefore require extra protection? e.g. you can change your bank details but not your date of birth

  3. TOTP is the name of the time-based one-time password used in 2FA

  4. Packages for this include django-2fa and django-otp

Sumit Singh, 'Django Admin at Scale: From Milliseconds to Microseconds'

  1. One of the most common Django admin bottlenecks is n+1 queries

  2. Running Queryset.explain() can help you determine the efficiency of a queryset

  3. Think about query counts, not just speed

  4. Use built-in Django tools first (e.g. select_related(), only(), defer())

  5. Clean code tells you what it does, docs explain why!!!

  6. Python's built-in frozenset() makes a set immutable

  7. Paginate by primary key rather than an offset

HTMX

There were a couple of talks on this (by Lucas Pires and Thomas De Bonnet). I can't remember which parts are from whom, unfortunately...

  1. 'The page refresh is what divides frontend developers'

  2. With HTMX, you write your code where things happen: e.g. make a request, show load indicator where the state is in the HTML. Everything happens from the backend, which requires a mindset shift.

Lightning talks

Eliana Rosselli

  1. There are websites out there for checking the colour contrast for accessibility
  2. Use large font sizes and light mode for code samples in talks!
  3. Your talk should lose nothing if images aren't visible (either because they don't load or a person can't see them)

Person I can't remember

Good philosophy for picking and configuring a linter: stop introducing new problems and fix the ones already there!

Emma Delescolle

Calico SSG for Django! Website and repo

Fabian Braun

Talking to your community matters — it may help you find that answer you didn't know you were looking for! Go to meet-ups, engage on dedicated Slack servers, etc.

Daniele Procida

Very impactful talk on the importance of representation and inclusion — especially of Black people — when building software.

  1. 'The effect of failure is only represented to people it failed in the first place'

  2. 'It's easy to forget people when they're not there'

  3. '[Certain experiences] will remain hidden from me because I am not one of those people and those people are not around me when they are affected by the products being made'