Django community: RSS
This page, updated regularly, aggregates Community blog posts from the Django community.
-
Foss4g NL: early afternoon sessions
(One of my summaries of the 2026 one-day Foss4g open source geo conference in Groningen, NL). Accessibility: geoinformation for everybody - Liliana Santoso-Avis & Jedidja van der Sluis - Stoutjesdijk WCAG (Web Content Accessibility Guidelines) deals with accessibility (a11y). (I personally try to take accessibility a bit into account, proper headings and reasonably contrast-rich colors on my website, for instance. I've made other summaries of "a11y" talks, for instance this one about accessible documentation, held at the 2025 pycon.de. It is not just accessibility, but really about the quality of the information as a whole. Thinking about the accessibility guidelines (listed below) helps you create better information projects. Perceivable Operable, for instance navigating a website with keyboard instead of mouse. Understandable Robust When making a map viewer, we often claim "we're an exception", but that's not fully the case. Your map component should not be a "keyboard trap", for instance. And the contrast of your map should be right. And if the map is essential for navigating through the rest of the site, you also can't claim an exception. You need a mindset shift. From "bah, extra work" to "hurray, better work". They started with an inventory, for instance of … -
A small proposal to form rendering in Django
It's been a while since my last post, mainly because June saw me start a new client, GSOC really taking off and we have our first real customers in Hamilton Rock with money being deposited and some money being spent, not without its teething issues! Also with a fair amount of social engagements as well! But anyway, on to today's post. During June I proposed a new feature idea which is an extension to Django's form rendering capabilities to include widgets templates inside a form renderer. Currently, it's only possible to Override widgets at a project level by specifying the template name, or you have to overwrite the widget and then specify your own custom template name and then use that custom widget. It's not possible to customize widgets at the form renderer level. My idea is to extend the form renderer API. Well actually extends the budget rendering API to check the specified form renderer. It should only be an extension to a private method inside the widget API. Below is the relevant code that I actually got Claude to spit out inside Hamilton Rock today. This is a first iteration which very likely needs some improvement, but it … -
TDD as religion
Tests are a cornerstone of modern development, and somewhere along the way we started treating a green suite as proof. It isn’t: it tells you the cases you thought of still pass, not the ones you didn’t. That confusion was always with us — and it matters more now that an AI agent might be the one chasing the green. -
Issue 344: Happy Birthday Djangonaut Space!
-
Python Leiden (NL) meetup summaries
Two summaries of the July 2 2026 Python meetup in Leiden. I've omitted one, "Python with Karel" by EiEi Tun, as I've made a summary of that talk in Utrecht a month ago, already :-) Building modern internal team CLIs with incremental automation - Farid Nouri Neshat Obligatory xkcd cartoons: https://xkcd.com/974 and https://xkcd.com/1319 and https://xkcd.com/1205 Toil: manual, repetitive, automatable, distracting you from your real work, no enduring value. Yes, he likes to automate things :-) Some examples of repetitive manual tasks: Creating dev containers. Gathering data for troubleshooting. Something that needs to be set manually in a database. Setting up a new AWS account. Creating a new dev environment on the new colleague's laptop. How to automate? Do it iteratively! Your boss might not like you to spend a day automating the task. But if you do it small steps at a time... Do it manually the very first time. Then start with documenting the steps. Then turn it into a do-nothing scaffold script: def step1(): print("Open the AWS page manually") input("Press enter to continue") Everytime you do the task, automate a small bit and flesh out the script over time. After many iterations, you'll have automated it fully! "I … -
Weeknotes (2026 week 27)
Weeknotes (2026 week 27) The last entry in this series was published 10 weeks ago so it really is time for another review of the releases I did during this time. Releases feincms3-forms The feincms3-forms forms builder has gained a documentation page on the wonderful Read the Docs service. The 0.6.1 release doesn’t contain any code changes, just pyproject.toml updates and the mentioned documentation rework. django-imagefield django-imagefield 0.23 is still in alpha. The handling of image fields when using libvips is optimized to use less memory hopefully. We’ll see. I also added some tests to verify that .mpo files are handled properly. feincms3 The Vimeo embed now always sets the dnt=1 parameter on the <iframe>, which asks Vimeo to not track the user. django-mptt I wrote about the somewhat annoying maintenance again. The library is still officially unmaintained, but I did a lot of work either just closing issues or also fixing them. The docs also contain many clarifications. I only released 0.19rc1 for now. feincms3-sites and feincms3-language-sites Last time I mentioned that default HTTP/S ports are now stripped so that the host matching can determine the correct site. Now a new case appeared where trailing dots weren’t stripped. The … -
200ms ± 500ms
I once needed the SLA for an endpoint my dashboard leaned on, so I asked the team that owned it. Their lead came back with 200ms ± 500ms. Read that literally and the fastest responses arrive 300ms before the request is even sent. The number wasn’t malicious — it came straight out of the standard formulas. The formulas were wrong for the data, and that mistake is everywhere. -
Maintaining a mature Open Source project: dealing with the upgrade treadmill with the help of a LLM
Maintaining a mature, reasonably-popular Django open-source is boring. Here I explore using a LLM to automate away some of the boring work. -
Open Source Comes From People
I recently attended my first PG Data 2026 conference where keynote speaker Robert Haas delivered a talk that has stayed with me. His keynote focused on the people behind PostgreSQL, the growing challenges of sustaining open-source communities, and the urgent need to cultivate new contributors through mentorship and community engagement. While his remarks centered on PostgreSQL, they sparked broader reflections for me about the future of open source and communities like Django. -
Issue 343: Django 6.1 beta 1 released
News Django 6.1 beta 1 released Django 6.1 beta 1 is now available, giving the community a chance to test upcoming features and improvements before the final release on August 5. Djangonaut Space: Launching Contributors Djangonaut Space shares the results from its first six mentorship sessions, showing how an 8-week cohort program helped launch 104 contributors from 40+ countries into long-term open source participation and leadership. Django Software Foundation How the Django Software Foundation Became a CNA Learn how the Django Software Foundation became a CVE Numbering Authority, giving it the ability to assign CVE IDs directly and streamline Django's security advisory process. Wagtail CMS News Wagtail as Django admin on steroids Think Wagtail is just a CMS? See why it can serve as a polished, modern replacement for Django's admin with a familiar API and powerful features that make client-facing backends shine. Comparing open weight AI models and providers Open weight AI models are closing the gap with proprietary LLMs, and this guide explains how to compare models and providers on performance, cost, energy use, and transparency. Releases Python 3.15.0 beta 3 is here! Python 3.15 beta 3 is out with nearly 200 bug fixes plus major additions like … -
🔗 Recommendations When Using LLM-backed Generative AI Systems for FOSS Contributions
Several recommendations for LLM usage in the context of open source. “The long term goal of software freedom is to eliminate the harm of proprietary technology. While we work toward that greater goal, we should seek to mitigate the harms that we cannot immediately eliminate. These recommendations aim to abate the damage of these systems, and also consider how these tools might counter-intuitively help us advance FOSS.” -
Supporting Django's Next Chapter
The path to hiring an Executive Director gained real momentum at DjangoCon US 2024, when Jacob Kaplan-Moss shared a vision for what dedicated resources could mean for the future of Django. In his blog post If We Had $1,000,000, he invited companies and supporters to help get the initiative off the ground. The response from the community was inspiring, and we’re proud to see that vision become reality. -
Wagtail as Django admin on steroids
Many of you have probably heard of Wagtail CMS, but not everyone knows that Wagtail, in a nutshell, is a supercharged admin backend for Django. At least that's how I see it, and how I often pitch it to fellow Django developers. Django comes with its own django.contrib.admin … Read now -
Boolean algebra
The third article in the series, still on conditions. The previous installment was about their shape — merging ifs, factoring shared decisions, dropping checks that earn nothing. This one reaches for the other lever: the algebra of the conditions themselves — not a textbook tour, just the handful of transformations I lean on in everyday code. -
Issue 342: DSF Executive Director Search
## News Announcing the Search for a DSF Executive Director The Django Software Foundation is hiring its first Executive Director, and we have the Django community to thank for making it possible. Six Django web development agencies have jointly pledged $47,500 to help fund the Executive Director's first year: Caktus Group, Lincoln Loop, Six Feet Up, Cuttlesoft, OddBird, and Two Rock. This is the financial foundation we needed to move from "we should hire an ED someday" to "we are hiring an ED now." I'm delighted to rejoin the Sovereign Tech Fellowship Hugo van Kemenade returns to the Sovereign Tech Fellowship after being one of six participants in the 2025 pilot, calling out how dedicated time helped ship Python 3.14 and 3.15 releases, mentor triagers, and improve release automation and accessibility. The post also tracks a wide set of community and governance work, and looks ahead to a larger 2026 cohort spanning maintainers, community managers, and technical writers. Python Software Foundation Python Software Foundation News: PSF Board Election Dates for 2026 PSF Board elections for 2026 open for nominations on July 28 (2:00 pm UTC) and voting runs September 1 to September 15, with voter affirmation due August 25. The … -
The 2026 way of using importmaps in Django
The 2026 way of using importmaps in Django I last wrote about Django, JavaScript modules and importmaps in May 2025, slightly over a year ago. The main topic of this post is the django-js-asset 4.0 release. The library is used in many places, some of the more well-known packages using it are django-mptt and django-ckeditor. I have since done a lot of work evolving the ways of integrating importmaps but the efforts to standardize upon an approach have stalled a bit. The main reason for this, apart from time and energy, was that I wasn’t really all that happy with the global importmap. When I had only a few modules using the importmap facility, I didn’t care all that much. Now that the recently released django-content-editor 9.0 also uses importmaps for shipping a refactored, much more modular JavaScript implementation while still keeping all the benefits of cache busting using ManifestStaticFilesStorage1, having a global importmap got annoying. The content editor JavaScript is only used within the Django administration interface, but when using a single global importmap object, the importmap entries were always there on each page that used an importmap at all. A better solution was needed. I’m a big fan … -
Cheating as a programming discipline
Great programmers cheat. A hard problem gets quietly swapped for an easier one; a transaction-grade database is replaced by a flat file nobody misses; machinery everyone else considers mandatory simply never gets built. They know a lot — and that’s exactly why they get away with it. -
This isn't a post about eating meat
I think vegetarians are mostly right. Most of their arguments about why we shouldn’t eat meet — environmental impact, treatment of animals, treatment of workers in the industry, health effects of too much meat consumption, climate impact, etc. — I tend to nod along. I’m broadly in agreement with most of their main arguments. And yet, I still eat meat. Why? Partially, it’s because while I agree with most arguments against meat eating, I also think that by and large vegetarians overstate their cases. Most of the environmental and social impacts aren’t really effects of eating meat; they’re results of the choices we’ve made as a society about how we produce meat. Namely, our system of industrialized farming. We don’t have to produce meat in a way that’s environmentally damaging; we’ve chosen to. Likewise, poor health outcomes are a result of eating too much meat (and not enough variety otherwise) — not something inherent in meat itself. My guess, though, is that these arguments aren’t actually that important to most vegetarians: I think that most are probably making the decision on a moral ground. They see killing animals as inexcusable, and sort of back into the other arguments because they’re … -
LLM Inspired Development
How Claude inadvertently suggested new features for my personal site. -
Understanding Memory Usage in Django Webserver Workers
If you are coming from the PHP world, you might be used to thinking that when a request reaches the web server, everything is parsed and processed from scratch. In Python, however, the behavior is a little different. A Python web server (for example, Gunicorn) starts one or more worker processes and then continuously accepts and processes requests as a running server application. In this article, I will explore how memory is managed in that environment. Startup time vs. request execution When you run a Django web server (either the development server or a Gunicorn-based deployment), there are two phases of execution: startup, when the server application is initialized, and the request/response cycle, when a request is received and processed to return a response. During startup, wsgi.py and get_wsgi_application() are executed once per worker at boot time, Django settings are evaluated, applications listed in INSTALLED_APPS are imported and registered, ready() methods of app configs are called, and URL patterns are compiled. During request execution, the middleware chain processes the request, the URL is resolved, the view is executed, context managers run within the view, the template is rendered, the middleware chain processes the response, and the response is returned. The … -
Issue 341: Django 2026 Fundraising Goals
News DSF 2026 Fundraising Goals The Django Software Foundation is raising its 2026 annual fundraising goal from $300,000 to $500,000. The money supports the Django Fellows program, legal and trademark work, community grants and events, ongoing infrastructure, and progress toward hiring an Executive Director. Announcing Our DjangoCon US 2026 Talks! DjangoCon US 2026 released its tutorial and talk lineup for Aug 24 to Aug 26, with live access for online-only ticket holders and free YouTube uploads after the conference. Expect sessions spanning Django 6.1 and modern ORM patterns, performance testing, Wagtail routing, Postgres updates, and deployment topics, with the final schedule to follow soon. Vulnerability and malware checks in uv uv introduces uv audit to scan locked dependencies for known vulnerabilities and adverse statuses, positioned as a faster uv-native alternative to pip-audit. Updates to Django Today, "Updates to Django" is presented by Hwayoung from Djangonaut Space! 🚀 Last week we had 16 pull requests merged into Django by 11 different contributors - including 5 first-time contributors! Congratulations to jodizzle, Bankai, Chris Rose, esperonus-karolis and Wes P. for having their first commits merged into Django - welcome on board! This week's Django highlights: 🦄 Made DjangoJSONEncoder consistently omit the .000 fractional-second … -
Running Fallout London on Bazzite
I’m a huge Fallout fan, and Fallout London is one of the most impressive mods I’ve seen in years: a full DLC-sized expansion set in post-apocalyptic London, made by a community team. Running it on Bazzite (my gaming OS of choice) wasn’t completely straightforward, so here’s what actually worked for me. Consider this a note to future me, but hopefully it saves someone else an afternoon of trial and error. What you’ll need Bazzite installed on your machine Heroic Games Launcher Fallout 4 (the mod requires it as a base) The “Fallout London One Click Mod” (available through Heroic) The steps 1. Install Heroic Games Launcher If you don’t have it yet, install Heroic from the Bazzite app store or via Flatpak. It’s a fantastic open-source launcher that handles GOG, Epic, and Amazon games, and it plays very nicely with Proton. After you install it, login with your GOG account 2. Install the Fallout London One Click Mod Search for “Fallout London” in Heroic and install the One Click Mod version. This bundles everything together so you don’t have to manually manage mod files. Let it do its thing. 3. Disable UMU (yes, it needs to be disabled) This is … -
Logical optimizations
The second article in the series. The first was about control flow; this one stays with the same tactic — reshaping code — one layer down, at the condition. Here: merging ifs, factoring shared decisions, and dropping checks that earn nothing. The Boolean algebra of conditions — De Morgan and friends — is a different lever, and gets its own installment next time. -
Browser Push Notifications for a Django Website
For DjangoTricks, and some other websites, I intentionally didn't set email notifications when a feedback message arrived – I didn't want to pay for an email server or spam my inbox. While checking the messages in the database from time to time, sometimes I found out about them too late. Last weekend, I decided to implement Web Push notifications to get notified about the feedback in my OS, just like in this example: This tutorial walks through adding Web Push notifications to a Django project from scratch. When a visitor submits a feedback form the site owner receives a native browser notification — even if the admin tab is closed — thanks to a service worker and a Huey background task. How it works Push Notifications work in such a way: at first, people who want to get notifications need to subscribe to the notifications in their browser. The subscribers are stored on the push notification servers and also their identifiers are stored in Django website database. Whenever we need to send the messages to those subscribers, we send them to push notification server that passes the message to all subscribers if their browsers are open at the moment. If … -
Issue 340: Django security releases 6.0.6 and 5.2.15
News Django security releases issued: 6.0.6 and 5.2.15 Five CVEs are fixed in this latest release. As ever, perhaps the best security step you can take is to always update to the latest version of Django. Updates to Django Today, "Updates to Django" is presented by Hwayoung from Djangonaut Space! 🚀 Last week we had 13 pull requests merged into Django by 8 different contributors - including 4 first-time contributors! Congratulations to Vishwa, Tim Harris, Codequiver, and Joe Babbitt for having their first commits merged into Django - welcome on board! This week's Django highlights: 🦄 Deprecated the safe parameter of JsonResponse, as the browser vulnerability it protected against was fixed in ECMAScript 5. #36905 Releases Python Release Python 3.15.0b2 Python 3.15.0b2, the second beta of four, is out with an explicit push for third-party maintainers to test now and file issues as early as possible. The release targets feature-complete beta with no ABI changes after beta 4, and recommends delaying production releases until 3.15.0rc1. Python Software Foundation PSF Strategic Plan 2026 Draft: Open for Community Feedback PSF is publishing the full Strategic Plan 2026 draft and opening a three-week feedback window ending June 25. The board asks reviewers to …