Django community: RSS
This page, updated regularly, aggregates Community blog posts from the Django community.
-
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 … -
Issue 350: Django moves to an annual release cycle
News Django moves to an annual release cycle Starting in January 2028, Django switches from its eight-month cycle to one feature release per year (matching Python's annual October releases), dropping the LTS distinction in favor of every release getting one year of mainstream support followed by two years of security and data-loss fixes; nothing changes before then. DSF Office Hours The DSF Board holds open office hours every Wednesday at 6:00 PM UTC, no agenda or invitation needed. Right now the main topics are the Executive Director search and the 2026 fundraising goal. Django Girls - August Newsletter Tie-in with Djangonaut Space for a team to work on the Django Girls infrastructure during the upcoming session. Plus a call to join the Social Media Team. PyPI freezes the HTML index API PyPI is adopting PEP 833 to stop extending the HTML simple-index format with new metadata, pushing future additions to the JSON API instead; nothing breaks and no action is needed unless you're a mirror or bulk consumer, in which case consider switching to JSON. Releases Django REST Framework 3.18.0 Django REST Framework 3.18.0 drops support for Django 4.2, 5.0, and 5.1, adds Django 6.1 support, and changes list-serializer (many=True) … -
Weeknotes (2026 week 33)
Weeknotes (2026 week 33) Holidays and the heat wave I had four weeks of holidays this summer. The timing couldn’t have been much better with the heat wave – doing much thinking seems to be impossible anyway. I organized a multi-day feast with a few friends and with much help from others. We built up the site and installations over the course of multiple days and spent some days tearing most of it down afterwards. I started back to the office job physically tired but mentally rested. That’s good. I’m really looking forward to seeing the pictures people took. What’s less good is that we’re living through the projections which climate scientists warned us about decades ago. Or worse, even, since Switzerland is one of the regions where the temperature increased more than the global average. The member of Switzerland’s Federal Council heading the Federal Department of the Environment, Transport, Energy and Communications reportedly said that he didn’t expect such intense heat. Of course, it was reported earlier in the same week that the same member was responsible for removing funding for a more resilient forest from the budget for the next fiscal year. This is unfortunately to be expected: … -
Storing Django Static and Media Files on Cloudflare R2
This tutorial shows how to configure Django to load and serve up static and media files, public and private, via Cloudflare R2. -
Duff's device in JavaScript
In 1983, Tom Duff needed to copy memory into an output register faster than his compiler could manage, and wrote the most famous abuse of switch in the history of C. I ported his device to JavaScript and raced it against the plainest possible loop — and the verdict changed with the engine, the engine’s version, and the CPU underneath. -
Managing email: peace of mind and efficiency with filters
Like probably everybody, I get a lot of email. Newsletters, weekly mails of some shops I want to monitor for handy discounts, linkedIn updates, GitHub/dependabot notifications, some left-over spam, calendar notifications, some Patreon stuff, etc, etc, etc. Oh, and some real, individual emails! Oh, and spread over two accounts, work and personal. Goal: less effort and lower maintenance I want my inbox to be much more empty. I don't need it to be "inbox zero", but having to press the PageDown key four times is a tad much. And everything is mixed together, so if I start to clean up, I'm constantly having to switch between "determining if some GitHub mail can be deleted" and "reading an interesting long newsletter". I get a low-level feeling of anxiety as I'm bound to miss or neglect important emails. And cleaning up the email is time-consuming as I'm constantly reading and ignoring the same email subjects (and not really dealing with them). So: I don't want to have my email all mixed up. The inbox should be emptier. And I want to set it up in a way I can easily maintain it. Solution: automatic filtering + post-holiday cleanup During my holiday, I … -
Django: introducing django-msgspec
It’s another day, another new package day here. Say hello to django-msgspec, a package of drop-in replacements for Django and Django REST Framework (DRF) components backed by msgspec. msgspec is a C-based serialization library covering JSON, MessagePack, YAML, and TOML, with optional schema validation through typed Struct classes. Its JSON encoder and decoder are several times faster than the standard library’s, which makes django-msgspec a cheap performance win in the parts of Django that handle JSON. Features There’s a version of JsonResponse: from django_msgspec.http import JsonResponse def index(request): return JsonResponse({"title": "Hello, world!"}) …a test client with matching test case classes: from django_msgspec.test import SimpleTestCase class IndexTests(SimpleTestCase): def test_index(self): response = self.client.get("/", headers={"accept": "application/json"}) assert response.status_code == 200 # response.json() uses msgspec to parse the response body assert response.json() == {"title": "Hello, world!"} …a version of Django’s json_script template tag, which is where this whole story began: {% load django_msgspec %} {{ sales_by_product_id|json_script:"chart-data" }} …and a handful of components that you activate purely through settings, with no code changes at all: SESSION_SERIALIZER = "django_msgspec.sessions.JSONSerializer" SERIALIZATION_MODULES = { "json": "django_msgspec.serializers.json", "jsonl": "django_msgspec.serializers.jsonl", } REST_FRAMEWORK = { "DEFAULT_RENDERER_CLASSES": ["django_msgspec.rest_framework.JSONRenderer"], "DEFAULT_PARSER_CLASSES": ["django_msgspec.rest_framework.JSONParser"], } That covers session storage and signing, dumpdata / loaddata in both … -
Issue 349: Django 6.1 and a DSF Executive Director
News Call for applicants for a Django Executive Director The DSF is hiring its first Executive Director to run fundraising, operations, staff, and legal/compliance for the Foundation. The role is US-based (no visa sponsorship). Applications (resume, optional cover letter, and a vision statement) are due September 14, 2026. Django 6.1 released Django 6.1 introduces model field fetch modes, database-level delete options for ForeignKey.on_delete, and dictionary-based email settings. Django 6.0 is now out of mainstream support and receives security and data loss fixes only until April 2027, so plan your upgrade before then. Thank you to release manager Jacob Walls and the entire Django team on another happy feature release. Releases Django security releases issued: 6.0.8 and 5.2.17 The releases address high-severity spatial lookup flaws that could write files or make network requests, plus denial-of-service risks in language and geometry handling and potential XSS from unsafe admin URLField values. Upgrade to Django 6.0.8 or 5.2.17 as soon as possible. Python 3.15.0 candidate 1 is here! Python 3.15.0 candidate 1 is available for testing, giving projects a release candidate against which to check compatibility and build wheels. Python 3.14.7 and 3.13.15 are now available! Python 3.14.7 and 3.13.15 are available as bug-fix … -
`break`/`continue` is the new `goto`
“Go To Statement Considered Harmful” is one of the most-quoted titles in programming, and almost nobody reads past it. The argument underneath is narrower than the slogan it became — and the reflex it bred, avoiding every jump, produces code worse than the goto it was meant to replace. -
Running Headscale on my own infra (and finally killing my WireGuard setup)
Hello everyone 👋 This one started in the dumbest possible way: I wanted to check on my 3D printer from outside my house. I have a Bambu printer running in LAN-only mode, and I use OctoApp to control it from my phone. Works great at home. Useless the moment I leave. The usual answer is OctoEverywhere, which is a lovely project, but it means my printer traffic goes through someone else’s servers, and I already run enough infrastructure that this felt silly. So I went looking for a way to just… have my home network with me. And I ended up rebuilding my entire remote access setup in an afternoon. What I had before My old setup was, in hindsight, a bit of a Rube Goldberg machine: A Hetzner VPS running WireGuard A node at home connected to that WireGuard tunnel Nginx Proxy Manager on that node A Pi-hole for the WireGuard side, resolving things to 10.0.0.x addresses Another Pi-hole for my actual home network, resolving to 192.168.0.x Two Pi-holes. Two address ranges. Two mental models of “where am I right now”. It worked, but every time I added a service I had to think about which side of the … -
Chicago Like a Local: Things to Do During DjangoCon US 2026 (Part 1)
DjangoCon US 2026 is coming back to Chicago from August 23–28, and we at Caktus couldn’t be more thrilled, not only to be returning as a Silver Sponsor, but also because I (Keanya) have the privilege of chairing the conference once again! -
Issue 348: One month until DjangoCon US
News See You in Chicago in One Month! In just one month, developers, maintainers, educators, and Django enthusiasts from around the world will gather in Chicago for DjangoCon US 2026. DSF member of the month - Katherine "Kati" Michel Kati is a longtime member of the Django community who has been a speaker, organizer of DjangoCon US, and member of DEFNA's board of directors. She shares some insightful thoughts on the current state of Django and where it can go from here, especially around AI. Next Stop Pescara! Looking forward to this year’s Django on the Med 🏖️? Perhaps you should come? And what to do if you can’t! Updates to Django Today, "Updates to Django" is presented by Raffaella from Djangonaut Space! 🚀 Last week we had 13 pull requests merged into Django by 10 different contributors - including 2 first-time contributors! Congratulations to Mundur and Philip Narteh for having their first commits merged into Django - welcome on board! News in Django 6.2: In the asynchronous request path, error responses (such as those rendered by handler404 and handler500) are now rendered on the request’s thread-sensitive thread, rather than on a shared thread pool, so that database connections used … -
Fast enough
Efficient resource utilization was at the forefront of computing from the very beginning. Over time we traded some of that efficiency for developer experience, and preserved the rest by harnessing better hardware and new paradigms: multithreading and multiprocessing, stream processing , asynchronous programming… Languages are how we reason about problems, encode algorithms, and organize programs — the vector runs from high-level languages through structured programming , OOP , functional and logic programming . Note what that vector does not include: how the runtime is structured, compiled or interpreted — either way we write some text and hand it to the system. Each step looks logical in hindsight. Yet some things don’t look logical at all.