Django community: RSS
This page, updated regularly, aggregates Community blog posts from the Django community.
-
DjangoCon Chicago 2026 Highlights
DjangoCon US returned to Chicago in 2026, bringing together members of the Django community for a week of learning, connection, and collaboration. I caught up with a few members of the Caktus team to hear about their favorite talks and takeaways from this year’s conference. -
Generalization as discipline
General code comes out better than code cut to fit one job, and its authors are the first to benefit. When we cannot afford all of it, the way down runs against instinct: work out the ideal shape first, then cut what today does not need, and keep a plan for putting it back. -
First Aid Kits: Bleeding Control & Tourniquets
Should you put a tourniquet in your first aid kit? Maybe, but you should know some things before you do: Training is more important than any piece of gear. Most bleeds can be stopped with direct pressure and/or proper wound packing — and both can be done with your hands and any old piece of fabric you have lying around. If you don’t know what “direct pressure” or “wound packing” means, or if you want to practice, take a course! A Stop The Bleed course is an excellent investment, and will go into all forms of bleeding control (including how to properly apply a tourniquet.) Most basic first aid courses will also cover bleeding control to some extent, though wilderness-oriented courses (for example, Wilderness First Aid) will typically go into more depth. (These are US-oriented suggestions; readers from other areas, I’d love for you to get in touch and let me know the equivalents in your country.) Once you do take that training, you’ll learn that the most important supplies for bleeding control are gloves, a stretchy bandage and plenty of gauze. Get those first, then think about other supplies. You probably don’t need a tourniquet in your first aid … -
Python: join my optimization workshop in Lisbon, 10th October
I’m running a workshop in Lisbon next month, and you’re invited! It’s a small, in-person, hands-on session on optimizing Python code, with a Django flavour. Here are the details: What: Python optimization workshop When: Saturday 10th October 2026, 10:00–13:00 Where: Martinhal Lisbon Oriente, Parque das Nações, Lisbon. Cost: Free, but places are limited and registration is required Size: Up to 10 people Led by: Myself, Adam Johnson Organised by: Mafalda Marques Register on Luma What we’ll do In my experience, Python projects often have some easy performance improvements waiting to be found, from client projects to large open source projects like Django itself. This workshop is designed to teach you how to find the hot spots worth optimizing, using these three tools in a loop: Capture a profile with cProfile, Python’s built-in profiler. Drill into it with profiling-explorer, to find where the time actually goes. Prove your change worked with tprof, which measures just the functions you care about and can compare before against after. I’ll teach the loop end-to-end on a real example. Then we’ll spend most of the morning using it for real, and you can pick your target: Django itself. I’ll bring a small collection of potential … -
Issue 355: DjangoCon Europe 2027 in Innsbruck and Django Probe
News Executive Director Search Extended to September 22 You don't need to be a Django or Python expert, or already part of the community, to apply for the DSF's first Executive Director role. Applications now close September 22, anywhere on Earth. DjangoCon Europe 2027 is heading to Innsbruck, Austria! 🏔️⛷️🚠🇦🇹 Tickets are on sale and the Call for Proposals is open for five days of Django, Python, and community in Innsbruck, February 17 to 21, 2027. Django Software Foundation DSF Board monthly meeting, Sept 10, 2026 The board approved DEP 0019, discussed next steps in their Executive Director search, committed to funding Djangonaut Space for the next three years, later launched a new corporate sponsorship page, and more. Python Software Foundation Announcing the 2026 PSF Board Election Results! Elaine Wong, Laís Carvalho, Ee Durbin, and Georgi Ker take the four open board seats out of 670 ballots cast, as Cheuk Ting Ho, Chris Neugebauer, and Denny Perez finish their terms. Announcing the 2026 Python Packaging Council Election Results! The first Python Packaging Council is seated: Brett Cannon and Pradyun Gedam on two-year terms, Donald Stufft, Henry Schreiner, and Ralf Gommers on one-year terms, so roughly half the council turns over … -
September Python Leiden meetup summaries
Two summaries from the September 2026 https://pythonleiden.nl/. Maintaining Python packages to attract free and open source software contributors - Steve Piercy Steve is in the Netherlands for next week's Plone conference in Maastricht (NL). He's been involved in open source software for over two decades. What are contributors? Contributors to open source software? Why do you do it? Learning (I myself got a good programming education out of contributing to Zope/Plone while still at the university). You might want to give back. You might like the community, you like to belong to the community. Finding your tribe. Perhaps build a resume or CV. Help other people. Why not? Negative online reactions. You want to really make money out of it. AI slop. You might not have time. Too busy. Life happens. You might enjoy walking your dog or doing gardening more. Or perhaps you just don't know how! Or you don't feel experienced enough (imposter syndrome). Perhaps you don't think your English is good enough (he advocates just using Google Translate). (He asked how many people had already contributed to open source: about half the room raised their hands.) There are actually lots of ways to contribute. It is not … -
Django: serve the change password well-known URL
When a password manager detects that a user’s password has been leaked or reused, it can prompt them to change it, but the password change URL varies by site. The web’s answer to such discovery problems is the reserved /.well-known/ URL namespace (RFC 8615), home to machine-readable files and endpoints like security.txt. A Well-Known URL for Changing Passwords is the web specification that uses this namespace to fix password page discovery. It reserves the URL path /.well-known/change-password to redirect to your actual change password page, wherever that lives. Password managers that use this URL include Apple’s iCloud Keychain (in Safari since 2019), Google Password Manager (since Chrome 86, 2020), and 1Password. web.dev has an excellent article explaining the specification and showing the Google Password Manager feature in action. In this post, we’ll look at implementing the change password URL in a Django project. Add the redirect The specification asks that /.well-known/change-password redirect to your change password page with a temporary redirect status code, for which you can use Django’s RedirectView. The pattern_name argument looks up the target URL by name, so the redirect stays correct even if you move the page. So, to add a redirect, plop this path in … -
Duff's device, part 2: copying within an array
Duff’s device in JavaScript raced hand-written loops that copy one array into another. A reader asked the follow-up: how do they compare with Array#copyWithin, the built-in that copies a range inside a single array? That is a different workload, so it needs its own measurement. The short answer: on every Node and Deno we can install today, the built-in runs 47 to 84 times slower than the loop. -
Django: introducing django-mcpz, for making MCP servers
I made another package! Say hello to django-mcpz, for building Model Context Protocol (MCP) servers in your Django project. The package tagline is easy peasy MCP servers in Django. MCP, the place to be? MCP specifies a way for LLMs to interact with external data sources. MCP servers can expose a set of tools, which are essentially functions that an LLM can call on behalf of a user. So, for example, a user can ask “where’s my pizza at?” and the LLM can call one or more tools on your pizza shop server to navigate your data and return the answer. Users can ask questions in natural language, and LLMs can interpret messy data in your system to return a clean, hopefully-correct answer. MCP is date-versioned, and the latest version, 2026-07-28, made the protocol much simpler by making it stateless, like ye olde HTTP APIs. There’s no longer an initialization handshake, no session ID, and no streaming event stream. Each request is a plain HTTP POST with a JSON body that gets one JSON response, like any other HTTP API. This new version is way easier to deploy for a typical synchronous, WSGI Django project. The previous default transport required … -
Issue 354: DjangoCon US Recaps and the Myth of the Well-Structured Project
News PyCharm & Django Fundraiser Extended to September 14 The second half of our annual JetBrains fundraiser has been extended through September 14, 2026. Thank you to JetBrains for the extra time. You still have time to renew your PyCharm license or give it a try. Call for volunteers: Fundraising Working Group The Django Software Foundation is looking for people to join the Fundraising Working Group. This is a particularly interesting time to get involved. Django Software Foundation Django Steering Council Meetings - 2026 Notes from the September 7 meeting: packaging related tools as extras, experimental features, usage telemetry, and Fellows pinging the CompositeField and content type parsing DEPs. Python Software Foundation Incident Report: File Hosting Errors Two weeks of intermittent 502s and 503s on files.pythonhosted.org came from a Fastly canary that left one cache node half rolled back, which then exposed three latent bugs in PyPI's own config. The takeaway for the rest of us: turn on dependency caching in CI, which setup-python leaves off by default. Wagtail CMS News Prototyping a new CLI for Wagtail Thibaud Colas is prototyping wagtail-cli, a terminal interface over the v3 API for browsing and publishing pages, managing media, and scaffolding projects, partly … -
Weeknotes (2026 week 37)
Weeknotes (2026 week 37) Tonight the temperature will drop to 10°C. I like it when it’s hot, but now I really enjoy the slightly cooler temperatures in Europe. The last post was written in the middle of the heat wave. Yesterday we still had temperatures of over 30°C, which is a lot for September. But it will be the new normal. Next year probably won’t be cooler. Releases from the last four weeks Lots of activity! django-authlib django-authlib 0.19 hardens the OAuth2 implementation a bit against replay attacks, provides utilities for removing password logins from the Django administration interface, and removes some of the confusion around role-based permissions. Upgrading is recommended. django-content-editor django-content-editor 9.0.2 fixes a bug in the function which allows cloning plugins from other regions. The bug was most visible when using something like django-json-schema-editor’s plugins which are only proxy models. Their type was lost because I was using _base_manager, which didn’t do the downcasting properly. (Sorry for the word salad.) django-tree-queries django-tree-queries 0.26.1 now uses annotations instead of .extra() to add the tree_path and tree_depth fields. This is great because the ORM knows these fields properly and we can now use e.g. .filter(tree_depth=1) instead of .extra(where=["..."]). This … -
Coding tactics: the series
Over the summer I published a series on coding tactics: the everyday craft of ifs, loops, and the reasoning behind them. Eight posts, one thesis, best read in order. This is the map. -
Issue 353: DjangoCon US Recaps Galore!
News Django Developers Survey 2026 results The fifth annual survey run with JetBrains is out, with the full report, infographics, and a companion writeup titled "The State of Django 2026: Boring is so back." Help test Python 3.15! Python release manager Hugo van Kemende kindly requests you add 3.15 and allow-prereleases: true to your GitHub Actions matrix and publish wheels before the October 1 release. Releases Django bugfix release issued: 6.1.1 Twelve fixes, nearly all of them 6.1 regressions: admin changelist search crashes, ModelAdmin.list_display traversing multiple relations, __in returning empty querysets, and DecimalField without precision on SQLite. Python 3.15.0 candidate 2 is here! The last planned release candidate, carrying 144 bugfixes from 76 contributors since rc1, ahead of the October 1 final. Django Software Foundation DEP 0019: Technical Governance for Django Now accepted, DEP 19 supersedes DEP 10 and DEP 12 as Django's single technical governance document, and trades hard eligibility rules for eight qualitative traits that Steering Council candidates should show three or more of. The five-member council keeps binding authority over technical decisions, with elections triggered by the final feature release of a major release series, a drop below three elected members, or a council vote. DSF member … -
Django and deployments
I have been pondering the wider deployment space in Django for a while and from various angles. This includes my released package django-prodserver but also wondering if the DSF could provide hosting as a small scale commercial operation or what via alternatives I could offer in hosting for Django specifically. Then also I have considered what the wider API in Django could be for deployments. These thoughts come at a good time, Will Vincent has done two talks on deploying python projects this year and I think his talks would serve as a great theoretical starting point to ensure we cover 90% of what is required. Then after DjangoCon US last week, Paolo made toot suggesting it's time for a deploy command. That toot triggered two things, first a memory of the chats I had in Athens this year and DjangoCon Europe and that I had been meaning to write about this topic for a while. First let's consider the high level conceptual stages when deploying a project: Prepare the overall environment - signing up for an account, creating a project or just booting up a VPS Prepare Django and it's settings - these are changes made to the project … -
"Premature" optimization
“Premature optimization is the root of all evil” — our field’s favorite half-sentence, quoted far more often than the sentence it was cut from. Usually it serves as permission: build it fast, profile later, fix a thing or two, done. Let’s put the sentence back together and ask what it licenses: when is optimization premature, and when is “premature” the excuse? -
Issue 352: PyCharm & Django Fall Fundraiser
News PyCharm & Django Fall Fundraiser Buy or renew an annual PyCharm Professional license through the campaign link and you get 30% off while JetBrains donates a matching amount to the DSF, which is working to close the gap between the roughly $300,000 it raises each year and the $500,000 that would make a full-time Executive Director sustainable. The campaign runs through September 10, 2026, so buy or renew before then. A renewal adds 12 months to your existing subscription. Django Software Foundation DEP 0020: Annual Release Cycle Django moves to one feature release each January under YYYY.N calendar versioning, starting with 2028.0 in place of what would have been 7.0. Every release now gets a year of mainstream support and two years of security fixes, which retires the LTS label. The Block and Tackle of Django's Code of Conduct Working Group The machinery behind Django's move to Contributor Covenant 3.0: a 30-day public comment period enforced by a GitHub workflow, CODEOWNERS gating changes to the CoC text, and an automated decision changelog. The working group is releasing its case-tracking templates under CC BY 3.0 for other projects to adopt. Python Software Foundation RISC-V is now officially supported by CPython! … -
Building large features for Django
It's been another month of slow writing and not for want, but in between holidays and the same amount of work, the blog post just got squeezed out each week. Additionally the GSoC project that I have been mentoring took a slight turn into more of a research based thing rather than trying to push anything into Django right now. However with the GSoC research itself and the recent features of tasks, the email updates, my own prodserver package, I'm beginning to solidify in my head what a modern Django feature looks like. One thing to clarify here is when I use the word feature, I'm referencing a concept that Django can represent, such as Databases, Tasks, Emails & Storage. These features while different in what they achieve have a very similar architecture within Django, marked by some common characteristics: A common API for the rest of Django to use A single settings configuration, typically a dictionary Pluggable backends that do the actual implementation and specified in the above settings Minimal backend implementations inside Django (except Databases), with extra implementations provided as community packages This architecture leans into Django being an API layer for various concepts that all tie together … -
Modern Django Deployments in 2026: My DjangoCon US 2026 Conference Talk
A written guide to my talk on deploying Django and why 90% of it is the same. -
Death by a thousand reasonable decisions
When I read consistent, cohesive code, I have a feel for its author. I may disagree with the ideas, but I can feel where the author is driving it. Other times the feel is split-brain — the code’s “energy” is fractured, the work of unaligned hands each solving its own small problem, none with an idea where the whole is going. Immediately I feel it should be rewritten or refactored holistically. Here is the paradox. Most of us are dedicated professionals with years of experience, and bad code is everywhere. Programmers I respect produce it; my own code is far from perfect. Why? -
Django Developers Survey 2026
🔗 Links 2026 Django Developers Survey Results Django 6.1 release notes Talk Python #446: Updates on Django's Async Story with Carlton Choose Boring Technology 🎥 YouTube YouTube Channel: @djangochat -
When Python is Too Slow
Python is a perfect language for Agile development, where requirements might change on the go. Especially if you are in a startup business, you will need to experiment and change things fast. However, Python is an interpreted language, and in certain situations you might need faster performance than what an interpreted language can provide. A common practice in these cases is using python-to-binary bindings, where the binary code is built with Rust, C++, or Go. In this article, I will explore bindings to Rust-based code. How do the bindings work The idea behind bindings is that you create a module with functions of a specific domain in a language that compiles to binary, and build it as a C-compatible dynamic library (.so on Linux, .dylib on macOS, .dll on Windows). Then a Python wrapper is built as a Python package and installed together with the dynamic library, allowing you to import and use functions that pass control to the corresponding functions in the dynamic library. On some occasions, classes can be used instead of functions. If any parameters are complex, they must be serialized in the wrapper and passed to the dynamic library as a JSON string or as a … -
Fuzzy String Matching in Django and PostgreSQL
Gerald Carlton and I will be presenting on fuzzy name search at DjangoCon US 2026 on Monday, August 24, and this is the companion blog post. Searching for a person by name is harder than it looks: names might be typed differently by different operators or change over a person’s lifetime; for example, Smith could be entered as Smyth, Smythe, or Smidt, and Weiss as Weiß. Although names are particularly susceptible to misspelling, these strategies apply to all fuzzy string matching. -
Issue 351: DjangoCon US last call, Djangonaut Space applications open
We'll see you in Chicago! Jeff and Will are heading to DjangoCon US next week, so if you're going too, come say hi. News Almost Time: What to Know Before You Head to Chicago DjangoCon US 2026 kicks off Monday, August 24 in Chicago, with registration and breakfast starting at 7:30 AM on the 14th floor. Watch for Friday's attendee email with your Slack invite and lightning-talk sign-up, and if you're sticking around for sprints on August 27-28, grab a free sprints ticket now. New One-Day and Online Tickets Can't make the whole week? DjangoCon US 2026 added one-day in-person tickets that also include online access to every other session, plus online-only tickets for remote attendees. DSF Membership Open Space at DjangoCon US Bring your questions about the Foundation to DSF board directors on Wednesday, August 26, 1:00 to 1:45 PM in the Wolf Point Ballroom. Djangonaut Space News Session 7 is preparing to take flight 💫 Session 7 runs October 12 through December 6, with teams of three or four Djangonauts guided by a Navigator and a Captain, working on Django Core, django CMS, Django Debug Toolbar, the Django Girls+ website, BeeWare, and Render Engine. Plan on about five … -
Exotic `goto`: generators and exceptions
The last post argued that break, continue, and labeled jumps are structured goto — disciplined jumps that keep code linear. Two ordinary language features are jumps in disguise: yield, which suspends a function and later resumes it in the middle, and throw, which leaps across stack frames to a waiting handler. -
Django: django-upgrade 1.32.0 out now, with 44 AI-assisted bug fixes
django-upgrade is my tool for automatically upgrading your project code for new Django versions. It rewrites your Python files to fix deprecations and adopt some new features, taking a chunk of the monotony out of upgrading between Django versions. Yesterday, I released version 1.32.0, which fixes 44 bugs. Some are big, some are small, and all of them were found by Claude Fable, with this simple prompt: Find and fix bugs Yup, that’s it. Across two rounds of self-directed bug discovery, Claude found and fixed these bugs, matching the coding style and changelog entries. It needed one more prompt to split the fixes into individual commits. I am pretty astounded at how well this little project worked. Claude worked “in the cloud”, while I was doing other stuff, so the bottlenecks to progress were my review capacity and CI runs on GitHub Actions for each commit. My big takeaway is that given such LLM power, the bar for software quality should be raised. Let’s review some of the bugs that it fixed, within the individual code fixers in django-upgrade. Bad url() to path() conversions The django_urls fixer converts old url() calls, with their regular expression patterns, into path() calls with …