Django community: RSS
This page, updated regularly, aggregates Community blog posts from the Django community.
-
Issue 347: Django 6.1 release candidate 1 released
News Django 6.1 release candidate 1 released This is the final opportunity to try out the new version before Django 6.1 is released. Try it, run your test suite, and report anything that breaks! The DjangoCon US 2026 schedule has been released! The talk lineup is out, covering Django 6.0 and 6.1 features, modern deployment patterns, GeoDjango at scale, and lightning talks across all three days. PyPI Releases now reject new files after 14 days PyPI will reject new files uploaded to releases older than 14 days to limit the impact of compromised publishing tokens or workflows. Planned Updates to the PyPI User Interface PyPI's first UI refresh since 2018 will roll out in phases over the coming months, surfacing more security signals on package pages. The first phase is staged on TestPyPI now and ready for your feedback. Wagtail CMS News What our AI guiding principles actually mean Wagtail unpacks its refreshed AI guiding principles and how they steer adoption in practice, starting with a firm commitment: no AI dependency in Wagtail core, with AI features staying opt-in through packages like Wagtail AI. Django Software Foundation DSF Board monthly meeting, July 09, 2026 Minutes from this month's DSF Board … -
Django: release code words up to 6.1
Did you know that each Django release has a “code word” associated with it? It’s hidden in plain sight, in the announcement blog post describing the list of features coming in the next version. I think this is a lovely little tradition. I last covered the list back in 2021, for Django 3.2 (post). This post expands the table up until Django 6.1, which is expected next month (the first release candidate came out earlier this week). Each code word links to its Wiktionary entry so you can see the definition. The word frequency column is based on the English data in the wordfreq Python package, as occurrences per billion words, so higher numbers mean the word is more common. Version Post author Quote with code word highlighted Word frequency(per billion words) 1.7 James Bennett ...will bring several major new features to Django, along with a host of other improvements... 58,900 1.8 Tim Graham ...several major new features and a cornucopia of other improvements... 363 1.9 Tim Graham ... myriad of goodies... 3,090 1.10 Tim Graham ... panoply of new features... 209 1.11 Tim Graham ... medley of new features... 1,910 2.0 Tim Graham ... assortment of new features... 1,820 … -
Tracking Blips
bliptracker was a side project that I happened to produce during June and last week realised I hadn't written about it here, so here goes! One annoyance I have with Claude.ai (or other web based LLM interfaces), is that I would start multiple conversations across multiple topics such as client work, organising my Todoist, an idea to explore, gifts to research, the list goes on, but I was keeping open tabs for each conversation to not lose track of the active conversations, but this didn't work as I still had those open loops in my head to follow up to move each conversation forwards. I didn't want a full blown task manager (I pay for Todoist which fits perfectly), but I did want to track the state of each conversation in Claude from both the web app and the mobile. The result is a two fold solution, first there is a system prompt telling Claude to end each respond with either a 🔴, along with the next action required from me, or a ✅ which tells me the conversation is resolved. The second part of the solution is a Chrome extension which then automatically updates the title of any conversation … -
Django: introducing django-crawl
I recently migrated one of my client projects from the legacy django-csp package to Django 6.0’s built-in Content Security Policy (CSP) support (release note). This security header is a powerful tool for preventing unwanted content from being loaded on your site, so configuration correctness is paramount. The migration was fairly straightforward, but a few pages had complicated overrides, so I wanted to be sure that no CSP headers had been changed by my swapping of CSP implementations. I had the idea to verify no page had changed its content-security-policy header by crawling the site with Django’s test client, outputting URL and header contents during the process. By diffing the output from crawls before and after the migration, I could check for changes and track down which pages had been affected. The core loop of that script looked something like this: from collections import deque from django.test import Client client = Client() client.force_login(superuser) queue: deque[str] = deque(["/", "/admin/"]) ... while queue: url = queue.popleft() ... response = client.get(url, follow=False) ... print(f"{url}\t{response.headers.get('content-security-policy')}") ... for anchor in BeautifulSoup(response.content, "html.parser").find_all( "a", href=True ): # Enqueue these found links ... This simple crawl of the site ended up flushing out seven non-CSP bugs, despite the … -
EuroPython 2026 Recap
Seven days of sponsor booth, talks, sprints, and hallway chats. -
Deploying Web Apps in 2026: My EuroPython 2026 Conference Talk
A written guide to my recent EuroPython talk on modern Python web deployments. -
Best Django Redis configuration for speed and size
`lzma` compresses the most and `zlib` is about as fast as `zstd` in `django_redis` as compressor. -
How I got Claude certified (and how you can too)
I’m Claude Certified Architect - Foundations now. Look at me. A friend from work, Daniel, pinged me right after he started studying because he was confused and a little frustrated. He’d gone through the official docs, done a couple of practice exams, and felt like there was no connection between what he was studying and what the exam was actually testing. Fair. I felt the same way when I started. So we hopped on a call, I dumped everything I knew, and this post is basically that call cleaned up so more people can use it. Fair warning up front: this is part study guide, part honest review. I’ll tell you how to pass, but I’m also going to be honest about the parts that felt like studying for the exam rather than becoming a better engineer. Both things are true at once. What I studied with The exam I took is the Claude Certified Architect - Foundations. The single most useful resource for me was the Claude Certification Guide. The lessons are very good, and everything that showed up on my exam was covered by the syllabus there. I took notes like a maniac: more than half of a … -
Migrating from FeinCMS to feincms3
Migrating from FeinCMS to feincms3 FeinCMS is still actively maintained, but development, bugfixes and new features mostly land on feincms3 and django-content-editor these days, not on FeinCMS itself. That’s reason enough to eventually move a project over. Someone asked on the feincms3 issue tracker whether there’s a guide for making that move. There isn’t one yet, so I thought I’d expand on my comment in the issue tracker and post it here too in the hope that it’s useful to others. The post is based on a gradual migration we did in a large, long-lived Django project – a textbook publishing platform with years of content. Unfortunately I can’t show more details since it’s a commercial, closed source project. During the migration, the platform stayed in production the whole time, aside from the inevitable bug here and there. The most important insight is that FeinCMS 1 content types and feincms3 plugins are close enough that we could keep using the same underlying database tables. An export/import step isn’t required at all. The overall shape of the migration FeinCMS keeps managing the plugin tables as usual, for now. New feincms3 plugin models get added alongside the old ones, with managed = … -
Issue 346: Supporting the Triptych Project
-
Django: introducing django-orjson
Just as cars painted red are known to be faster, libraries implemented in Rust are also known to be faster. Today’s example is orjson, a Rusty replacement for Python’s built-in json module, boasting 10x faster serialization and 2x faster deserialization. Such a library is great, but adopting it isn’t easy, especially when your framework uses json in many different parts. To help Django developers adopt orjson, I have created django-orjson, which provides a whole bunch of drop-in replacements for Django and Django REST Framework (DRF) components backed by orjson. For example, there’s a version of JsonResponse: from django_orjson.http import JsonResponse def index(request): return JsonResponse({"title": "Hello, world!"}) …a test client with matching test case classes: from django_orjson.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 orjson to parse the response body assert response.json() == {"title": "Hello, world!"} …a version of Django’s json_script template tag: {% load django_orjson %} {{ chart_data|json_script:"chart-data" }} …and plenty more! All tested against the currently supported versions of Python and Django with 100% branch coverage. While database queries tend to dominate the typical Django application’s runtime, the time spent in serialization and deserialization can still be significant. … -
How to use a list/tuple/array in Django with a raw SQL cursor
This does not work: from django.db import connection list_of_values = [1, 2, 3] with connection.cursor() as cursor: cursor.execute(""" SELECT * FROM my_model_table WHERE some_value IN %s """, [ tuple(list_of_values), ]) results = cursor.fetchall() It will give you: django.db.utils.ProgrammingError: syntax error at or near "'(1,2,3)'" LINE 4: WHERE id IN '(1,2,3)' It used to work with psycopg v2. Now, in psycopg v3, you have to use the ANY operator. See "You cannot use IN %s with a tuple" This will work: from django.db import connection list_of_values = [1, 2, 3] with connection.cursor() as cursor: cursor.execute( """ SELECT * FROM my_model_table WHERE some_value = ANY(%s) """, [ list_of_values, ], ) results = cursor.fetchall() Note the ANY(%s), and instead of a list that has a tuple, it's a list that has a list. What About a List of Strings Consider... from django.db import connection -list_of_values = [1, 2, 3] +list_of_values = ['foo', 'bar', 'fiz'] with connection.cursor() as cursor: cursor.execute( """ SELECT * FROM my_model_table WHERE some_value = ANY(%s) """, [ list_of_values, ], ) results = cursor.fetchall() That will result in: django.db.utils.DataError: invalid input syntax for type integer: "foo" LINE 4: WHERE some_value = ANY('{foo,bar,fiz}') My solution was to rewrite the SQL string itself … -
Issue 345: Django security releases issued: 6.0.7 and 5.2.16
News Django security releases issued: 6.0.7 and 5.2.16 Three new CEVs have been addressed in the latest security releases. We encourage all users of Django to upgrade as soon as possible. Django on the Med: Venue and Hotel Details for Edition 2! A few more confirmed details for Django on the Med 🏖️ 2026, which will take place from September 23 to 25, 2026 in Pescara, Italy 🇮🇹. Thank you Lacey - Django Commons Django Commons credits Lacey Henschel for helping shape the admin team from day one, including onboarding Django REST Framework, building the recruitment pipeline, and creating project check-ins that prevent stagnation. Her decision to step down is framed as proof that sustainability includes taking breaks without guilt, with hard judgment calls rooted in respecting maintainers and community trust. Django Software Foundation Last Call 2026 Django Developer Survey The 2026 survey is ending next week on July 13th. Thank you to everyone who already filled it out. Please encourage all your friends and colleagues to do the same. This is the single most important tool for collecting data from the Django community and directly influences the work of Fellows and new features. Updates to Django Today, "Updates to … -
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 … -
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