Django community: RSS
This page, updated regularly, aggregates Community blog posts from the Django community.
-
Djangocon EU: scaling the database, using multiple databases with Django - Jake Howard
(One of my summaries of the 2026 Djangocon EU in Athens). (Jake is the author of Django tasks, mentioned before at the conference. He's also in this week's Django podcast.) Scaling: horizontal and vertical. Horizontal: more machines. Vertical: more resources per machine. Horizontal scaling is often easier. Just start more django processes on more servers. But... often there's still only one database server. Databases aren't typical applications. They bring enormous speed and features, but have a big requirement: there's only one database server that's allowed to write to its data. One thing you can do is sharding: splitting up your data over multiple database servers. You need to think hard about this, as moving data afterwards is hard. And there are foreign key problems. You can improve scaling in a simpler way, with syncing: a primary with multiple replicas. Writing only happens to one databases, this syncs to the replicas (often in milliseconds). When you want Django to talk to them, you need a load balancer (pb_bouncer and so) in front of the replicas for the read traffic. Note: you don't want to use the primary for reading for performance reasons. Django allows multiple databases: DATABASES = { "default": {.....}, β¦ -
Djangocon EU: partitioning very large tables with Django and Postgresql - Tim Bell
(One of my summaries of the 2026 Djangocon EU in Athens). The company where he works (Kraken) had an issue with vacuuming. 2TB table, 9 billion rows. 20-30 million row updates per day. The necessary vacuuming would take 16-20 hours every day. Partitioning seems a good idea. There aren't a lot of resources to read or watch. One of the best is a talk by Karen Jex. When to partition? Size over 100 GB or more than 100 million rows. You should rather not partition unless you really need to. In their case, vacuuming provided the reason. Vaccuuming a partial table takes much less time. Table partitioning: each row belongs in a partition based on a "partition key", the value and a set of bounds/rules. So "id 1-1000 in partition 1, 1001-2000 in 2". Which partition method to choose? Range, list, or hash? Look at your application, really design it from the ground up to work with partitioning in mind. How do you access your data? How do you want to purge data? Django abstracts away the complexity of the database, but the abstraction can be a bit leaky. Database partitions can be something that leaks through. Partitioned tables don't β¦ -
Djangocon EU: lightning talks
(One of my summaries of the 2026 Djangocon EU in Athens). Note: "live-blogging lightning talks" means "I missed some names or mis-spelled them" :-) Faster delivery with feature flags - Miha Zidar Feature flags are often used for continuous delivery. You need to watch out with tests: do you need to run all of them twice, with and without the feature flag? And: remember to clean up the feature flags. Make them easy to remove. So only "if FEATURE .... else .....". Only use them to make deployment safer and faster Lessons from being an admin at Djangonaut Space - Raphaella Suardini https://djangonaut.space is a mentorship program to help you get into Django. All volunteers. There are some communication challenges when working with volunteers. People with different native languages. And you don't want to communicate too often, but you also want to communicate all that's necessary... There's an invisible workload: if you're an admin, you're partially also taking on resposibilities of others that might drop some tasks. Make decisions. Take care of your work/volunteer/life balance. Djangonaut space really helps people, which motivates her a lot and helps keep her volunteering her time and effort. Priming AI with atomic docs - β¦ -
Djangocon EU: Django forms in the age of HTMX: the single field form - Hanne Moa
(One of my summaries of the 2026 Djangocon EU in Athens). You can go totally overboard with forms. Forms nested in forms. A list of forms. A recursive list of forms. She had to work with lots of elaborate forms/questionaires that needed to have many variants. Especially questionaires can drive you crazy with their dynamic form behaviour. A solution is to have a single field at the time. So: many forms with one single field. A little piece of htmx can load the single field forms when you click their "edit" button. Some example code is at https://github.com/Uninett/singlefieldform . (The presentation is there, too, in the slides/ directory). As an example, she showed a user preferences form. For every new preference, you only need to add an extra "single field form" which works on its own. Handy. The magic is that every field inherits from a SingleFieldMixin, which registers itself with the "main form page" registry. The main form page can iterate over the single field forms. Tip: using subclasses is the easiest way to get a plugin mechanism to work. (But de-activating the mechanisim is hard.) Unrelated photo explanation: a recent trip to the "Modellbundesbahn" in Germany. The same β¦ -
Representing 'Jobs to be Done' in a project
I have had this idea/theory for a while, that most software tools would benefit from a simple built in todo list built into the product directly. The main idea is for users to create jobs themselves or for the system itself to create jobs for the user to complete. The general thesis for this idea comes from a direct reference to the term "Jobs to be done". Any piece of software that gets used, exists to complete a job and do it better than the solution before it. Well over the last couple of months I have turned this idea into a reality inside Hamilton Rock, or at least the first version of it and so far it seems very promising. The general API design is a few custom signals, a model and some signal reciever functions for the custom signals. The rest of the project interacts solely through the custom signals job_requested and job_completed. Each does as you would expect, job_requested requests a job be created, job_completed complete the related job to the model instance given. The core of the job model has a status, type and a generic foreign key which forms the target related to the job. β¦ -
Built with Django Weekly Roundup: Mar 23 to Apr 13
Hey, Happy Monday! Why are you getting this: You signed up to receive this newsletter on Built with Django. I share recent projects, jobs, and useful Django links. If you no longer want this, you can unsubscribe anytime. News and Updates This issue covers March 23rd through April 13th. I widened the window this time so we capture the full recent batch of good additions. Sponsor This issue is sponsored by TuxSEO, your content team on auto-pilot. Generate SEO-focused content briefs and drafts faster, and ship consistently without the usual content bottlenecks. Projects Master Grammar - English grammar learning platform with structured lessons and tests. Built for english learners to master their grammar and achieve TOEIC/IELTS score target. Echoflare Managed Services - Professional Managed IT Services for Toronto Businesses My IT Fleet - Advanced IT Service Hub with advanced ticket approval flow , IT Asset inventory tracking, and It Fleet health intelligence. Jobs Backend Engineer at Twindo (Formerly Canvas) β Remote Lead Engineer (Backend) at Onos Health β Remote Fullstack Engineer (backend-leaning) at Pinwheel β Hybrid (NYC - Union Square) B2B SaaS) at Weave Bio β San Francisco (SF), Hybrid/Onsite 3 days/week Product Engineer at Baserow β Remote Senior Software β¦ -
djust 0.4.0 β The Developer Experience Release
djust 0.4.0 ships 30+ features focused on developer experience: flash messages, keyboard shortcuts, form recovery, scaffolding generators, debug tooling, and security hardening. Build real-time Django apps with less code than ever. -
Django News - DjangoCon Europe Next Week! - Apr 10th 2026
Introduction Hi everyone, sorry for the late send of Issue #331. Last week, our provider, Curated, which is owned by Buttondown, went down and wasnβt able to send our newsletter for six days. You might have received it yesterday, but not everyone did. Itβs the first time in several years we havenβt been able to land in your inbox. Weβve been in touch with their support all week and appreciate your patience while this gets sorted out. In the meantime, Will and I are looking at other provider options. If this shows up next week looking a little different, thatβs probably why. If you missed it, please check out last weekβs Issue 331: https://django-news.com/issues/331#start Django Newsletter News Django security releases issued: 6.0.4, 5.2.13, and 4.2.30 Django 4.2 has reached the end of extended support. Five CVEs (security vulnerabilities) fixed in this latest update. djangoproject.com DjangoCon Europe is next week! April 15-19 in Athens, Greece. There is a Django.Social event the night before, April 14th, 6-10pm, at Ipitou The Bar, organized by Jon Gould of Foxley Talent and Andrew Miller. djangocon.eu Updates to Django Today, "Updates to Django" is presented by Pradhvan from Djangonaut Space! π Last week we had 14 β¦ -
Switching all of my Python packages to PyPI trusted publishing
Switching all of my Python packages to PyPI trusted publishing As I have teased on Mastodon, I’m switching all of my packages to PyPI trusted publishing. I have been using it to release the django-debug-toolbar a few times but never set it up myself. The process seemed tedious. The malicious releases uploaded to PyPI two weeks ago and the blog post about digital attestations in pylock.toml finally pushed me to make the switch. All of my PyPI tokens have been revoked so there is no quick shortcut. Note I’m also looking at other code hosting platforms. I have been using git before GitHub existed and I’ll probably still use git when GitHub has completed its enshittification. For now the cost/benefit ratio of staying on GitHub is still positive for me. Trusted publishing isn’t available everywhere, so for now it is GitHub anyway. In the end, switching an existing project was easier than expected. I have completed the process for django-prose-editor and feincms3-cookiecontrol. For my future benefit, here are the step by step instructions I have to follow: Have a package which is buildable using e.g. uvx build On PyPI add a trusted publisher in the project’s publishing settings: Owner: matthiask, β¦ -
New Package: Django Dependency Map
I have recently been reading Swizec Teller's new book Scaling Fast and in it he mentions architectural complexity, which reminded me of my desire for a tool that combines database dependencies between Django apps and import dependencies between Django apps. To date, I have used other tools such as graph models from Django extensions, import-linter is the most recent one, and pyreverse from Pylint. They all do bits of the job, but require manual stitching together to get a cohesive graph of everything overlaid in the right way. So I remembered about this, and so over the last couple of days, I've built a new package which combines all of this into a live view which updates as you build your app, a management command and a panel for Debug Toolbar. Why the Django app level, you ask? Primarily, I do find models good, but they can get a little too complicated and a little you get a few too many lines and doing imports at the module level within an app or like separating it all out, again, you lose it becomes there becomes too much noise to signal to really understand the logical relationship between different components in β¦ -
How I configured OpenClaw's multi-model setup (so you don't have to)
A heads up before we start: over 95% of this blog post was written by my OpenClaw bot running GLM-5. I reviewed, edited, and approved everything, but credit where it’s due: Tepui β°οΈ (yes, I named my AI) did most of the heavy lifting. I need to vent, but in a good way this time. Last week I vented about Anthropic pushing away paying customers. After that third-party ban hit, I had to rip out Claude Opus 4.6 from my OpenClaw setup and find alternatives. So I rebuilt the whole thing from scratch. This time, I did it right. What I wanted I use OpenClaw as my personal AI assistant. It connects to my Telegram, manages my calendar, runs cron jobs, helps with research, and generally makes my life easier. Before the ban, it was running Claude Opus 4.6. After the ban, I needed alternatives. My requirements were simple: Free or cheap (Lazer’s LiteLLM proxy gives us free access to certain models) A text model for daily use (fast, capable reasoning) A vision model for images and PDFs (I send screenshots, receipts, documents) Image generation (sometimes I need to create images) A fallback if something breaks What I got was β¦ -
I've Been the Sole Developer of a Healthcare Membership Platform for 6+ Years. Here's What It Looks Like.
A few years back, a healthcare professional association reached out to me. They regulate and support thousands of practitioners across their region: licensing, insurance, events, the whole deal. Their website couldn't keep up. What they needed was a platform that could handle member applications, renewals, payments, event registrations, an β¦ Read now -
I patched GSD, and why you should patch it too
GSD (Get Shit Done) is one of the best things that’s happened to my development workflow. If you haven’t heard of it, it’s a meta-prompting and context engineering system for Claude Code (and OpenCode). It breaks your work into milestones and phases, spawns fresh subagents with clean contexts for each task, and solves the context rot problem that kills quality in long AI sessions. I wrote about my full setup on my AI toolbox page. GSD is great out of the box. But I wanted it to be mine. I’ve been using GSD daily for weeks now, and over time I kept bumping into the same friction points: the plan review was too shallow, the verification step was too manual, and the UI audit felt incomplete. So I did what any developer would do. I patched it. This post is about the three patches I made, how they work, why I made them, and how you can build your own. More importantly, it’s about why you should be patching your tools. Not just GSD; any tool you use daily. The philosophy: own your tools Here’s the thing about AI tools right now: we’re at a point in time where you β¦ -
Anthropic is pushing away its paying customers
I need to vent. I want to start by saying this is my opinion and doesn’t reflect the views of my employers or anyone else. I’ve been paying $100/month for Claude Max because Claude is, without question, the best model for programming. I’ve built my entire AI workflow around it. I’ve written blog posts about it. I’ve recommended it to colleagues, friends, and strangers on the internet. I’ve been a loyal, paying customer. And Anthropic keeps making it harder to stay. The third-party ban On the night of April 3, 2026, Anthropic sent an email to subscribers announcing that third-party harnesses like OpenClaw can no longer use Claude Max subscription limits. Starting April 4 at 12pm PT. That’s less than 24 hours of notice. Ouch. Let that sink in. Less than 24 hours to rip out and replace the model powering my personal AI assistant, my Emacs tooling, and potentially other parts of my workflow. My OpenClaw setup was running Opus 4.6 for personal tasks: managing my calendar, maintaining my open source projects, doing research, all through Telegram. It was perfect. Now if I want to keep using Claude with OpenClaw, I need to pay extra on top of my β¦ -
Django News - Supply Chain Wake-Up Call - Apr 3rd 2026
News Incident Report: LiteLLM/Telnyx supply-chain attacks, with guidance A recent supply chain attack on popular PyPI packages exposed how quickly malware can spread through unpinned dependenciesβand why practices like dependency locking and cooldowns are now essential for Python developers. pypi.org The PyCon US 2026 schedule is live π΄π plus security updates, community programs & more PyCon US 2026 heads to Long Beach with its schedule now live, alongside major Python ecosystem updates spanning security improvements, new community programs, and ongoing PSF initiatives. mailchi.mp Django Software Foundation DSF Board Meeting Minutes, March 12, 2026 DSF approved trademark renewal plans, advanced a long-awaited Code of Conduct update, and continued shaping community governance and outreach efforts. django.github.io Wagtail CMS News How to Generate SEO Descriptions for Your Entire Wagtail Site at Once β‘ Use Wagtail AIβs built-in LLM pipeline to bulk-generate SEO meta descriptions across your entire site in minutes with a simple Django management command. timonweb.com How to Show a Waitlist Until Your Wagtail Site Is Ready A clever Django and Wagtail pattern for launching with a waitlist while selectively granting preview access using secure cookies and a simple passphrase gate. djangotricks.com Build Dynamic Campaign Landing Pages in Wagtail Use a single β¦ -
OpenCode as a server: AI agents that work while I sleep
My main machine is a beast. Ryzen 9 9950X3D, 64 GB of RAM, RX 9060 XT, three monitors, the works. It barely ever shuts off. So at some point I started thinking: why isn’t this thing working for me when I’m not sitting in front of it? The answer is now: it does. I’m running OpenCode as a persistent server on this machine, accessible from anywhere through my WireGuard VPN. I can spin up coding sessions from my MacBook Air, my phone, wherever. And the best part? I have scheduled jobs that run overnight: adding tests, updating documentation, enforcing code conventions. I wake up to PRs waiting for my review. Here’s the full setup. The architecture βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β roger-beast β β (Ryzen 9 9950X3D / 64GB) β β β β ββββββββββββββββββββ ββββββββββββββββββββββββ β β β opencode serve ββββββββ systemd user service β β β β :4096 (web UI) β β (auto-start/restart) β β β ββββββββββ¬ββββββββββ ββββββββββββββββββββββββ β β β β β β ββββββββββββββββββββββββ β β β β opencode-scheduler β β β β β (systemd timers) β β β β β ββββββββββββββββββββ β β β β β β 2am: add tests β β β β β β β 3am: update docs β¦ -
Python Leiden (NL) meetup: newwave, python package setup and cpython contribution - Michiel Beijen
(One of my summaries of the Leiden (NL) Python meetup). Wave audio is more or less the original representation of digital audio. .wav format (there are competing formats like .au or .aiff). Typically it is "PCM-encoded", just as what comes out of the CD. The .wav format was introduced by microsoft in windows 3.1 in 1992. But... it is still relevant for audio production or podcasts. And: for lab equipment. The company Michiel works for (https://samotics.com/, sponsor of the meetup's pizza, thanks!) records the sound of big motors and other big equipment for analysis purposes. They use .wav for this. Around 1992, Python also started to exist. Version 1.0 (1994) included the "wave" module in its standard library. But: it is only intended for regular .wav usage, so two stereo channels and max 44.1 kHz frequency. He needed three channels (for sound recordings for the three phases of the electrical motor) and he needed higher resolution. He showed that you could actually put three channels into a .wav with Python. Audacity loaded it just fine, but the "flac" encoder refused it, with an error about a missing WAVE_FORMAT_EXTENSIBLE setting. He started investigating the python bugtracker and discovered someone had already β¦ -
Python Leiden (NL) meetup: creating QR codes with python - Rob Zwartenkot
(One of my summaries of the Leiden (NL) Python meetup). Qr codes are everywhere. They're used to transport data, the best example is a link to a website, but you can use them for a lot of things. A nice different usage is a WIFI connection string, something like WIFI:T:WPA;S:NetworkName;p:password;; . Rob focuses on the url kind. There's a standard, ISO/IEC 18004. QR codes need to be square. With a bit of a margin around it. The cells should also be square. You sometimes see somewhat rounded cells, but that's not according to the standard. You sometimes see a logo in the middle, but that actually destroys data! Luckily there's error correction in the standard, that's the only reason why it works. There's more to QR codes than you think! He uses the segno as qr code library (instead of "qrcode"). It is more complete, allows multiple output formats, it can control error correction: import segno qr = segno.make("https://pythonleiden.nl/") qr.save("leiden.png") Such an image is very small. If you scale it, it gets blurry. And there's no border and no error correction. We can do better: import segno qr = segno.make("https://pythonleiden.nl/", error="h") # "h" is the "high" level of error correction, β¦ -
Python Leiden (NL) meetup: building apps with streamlit - DaniΓ«l Kentrop
(One of my summaries of the Leiden (NL) Python meetup). DaniΓ«l is a civil engineer turned software developer. He works for a company involved in improving the 17000 km of dikes in the Netherlands. He liked programming, but interfacing with his colleagues was a bit problematic. Jupyter notebooks without a venv? Interfaces with QT (which explode in size)? PyInstaller? In the end, he often opted for data in an excel sheet and then running a python script... He now likes to use streamlit, a Python library for creating simple web apps, prototyping, visualisation. It has lots of build-in elements and widgets. Data entry, all sorts of (plotly) charts, sliders, selectboxes, pop-ups, basically everything you need. You can add custom components with html/css/js. How does it work? It is basically a script. The whole page is loaded every time and re-run. A widget interaction means a re-run. Pressing a button means a re-run. There is state you can store on the server per session. He showed a demo demonstrating the problems caused by the constant re-running (and losing of state) and how to solve it with the session state. He then showed a bigger streamlit demo. On a map, you could β¦ -
Boost Your GitHub DX - Adam Johnson
π Links Adam's Books Introducing tprof Introducing icu4py Carlton's keynote at DjangoCon Europe Recent trends in the work of the Django Security Team π¦ Projects dj-urls-panel Hornbeam Tachyon π Books The Coming Wave by Mustafa Suleyman The BEAM Book: Understanding the Erlang Runtime β Erik Stenman The Fabric of Civilization by Virginia Postrel π₯ YouTube YouTube Channel: @djangochat Sponsor This episode is brought to you by Six Feet Up, the Python, Django, and AI experts who solve hard software problems. Whether itβs scaling an application, deriving insights from data, or getting results from AI, Six Feet Up helps you move forward faster. See whatβs possible at https://sixfeetup.com/. -
How to Generate SEO Descriptions for Your Entire Wagtail Site at Once
Recently, I've used Wagtail AI internals to mass-generate SEO descriptions for my blog posts. 150+ pages, done in minutes β way faster than clicking through the admin UI one page at a time. Wagtail AI package provides you with a solid set of AI tools that help with text β¦ Read now -
Django News - Balancing the AI Flood in Django - Mar 27th 2026
News Calling for research participants from Django, Laravel, Ruby on Rails, Next.js and Spring Boot communities Former DSF President and researcher Anna Makarudze is seeking Django developers to share insights on dependency vulnerabilities and supply chain risks in open source. pychronicles.com Djangonaut Space News Djangonaut Space Financial Report 2025 Djangonaut Spaceβs 2025 report highlights a community-powered year of $2.2k in donations funding tools and conference access, while setting sights on sending contributors to even more events in 2026. djangonaut.space Djangonaut diaries, week 3 - Working on an ORM issue A deep dive into Djangoβs ManyToMany indexes reveals an unnecessary extra index, showing how databases already optimize with composite indexes and setting the stage for a cleaner ORM fix. dev.to Wagtail CMS News Wagtail Routable Pages and Layout Configuration Build flexible Wagtail routable pages that use StreamField layouts to dynamically control how Django model data renders on detail views. djangotricks.com Updates to Django Today, "Updates to Django" is presented by Raffaella from Djangonaut Space! π Last week we had 18 pull requests merged into Django by 15 different contributors - including 4 first-time contributors! Congratulations to Juho Hautala, Huwaiza, (James) Kanin Kearpimy π and Praful Gulani for having their first commits β¦ -
LLMs for Open Source maintenance: a cautious case
LLMs for Open Source maintenance: a cautious case When ChatGPT appeared on the scene I was very annoyed at all the hype surrounding it. Since I’m working in the fast moving and low margin business of communication and campaigning agencies I’m surrounded by people eager to jump on the hype train when a tool promises to lessen the workload and take stuff from everyone’s plate. These discussions coupled with the fact that the training of these tools required unfathomable amounts of stealing were the reason for a big reluctance on my part when trying them out. I’m using the word stealing here on purpose, since that’s exactly the crime Aaron Swartz was accused of by the attorney’s office of the district of Massachusetts. It’s frustrating that some people can get away with the same crime when it is so much bigger. For example, OpenAI and Anthropic downloaded much more data than Aaron ever did. A somewhat related thing happened with the too-big-to-fail banks: There, the people at the top were even compensated with golden parachutes at the end. LLM companies seem to be above accountability too. Despite all this, I have slowly started integrating these tools into my workflows. I β¦ -
Building modern Django apps with Alpine AJAX, revisited
About nine months ago I wrote an article about my quest to simplify my web development stack. How I went from SvelteKit on the frontend and Django on the backend, to an all-Django stack for a new project, using Alpine AJAX to enable partial page updates. Iβve now been using this new stack for a while, and my approach -as well as my opinion- has changed significantly. Letβs get into what works, what doesnβt, and where I ended up. A quick recap Alpine AJAX is a lightweight alternative to htmx, which you can use to enhance server-side rendered HTML with a few attributes, turning <a> and <form> tags into AJAX-powered versions. No more full page refreshes when you submit a form. The key mechanic: when a form has x-target="comments", Alpine AJAX submits the form via AJAX, finds the element with that ID in the response, and swaps it into the page. The server returns HTML, not JSON. In the original article I used django-template-partials (since merged into Django itself) to mark sections of a template as named partials using {% partialdef %}. Combined with a custom AlpineTemplateResponse the view could automatically return just the targeted partial when the request came β¦ -
Built with Django β Weekly Roundup (Mar 16βMar 23, 2026)
Hey, Happy Monday! Why are you getting this: *You signed up to receive this newsletter on Built with Django. I promised to send you the latest projects and jobs on the site as well as any other interesting Django content I encountered during the month. If you don't want to receive this newsletter, feel free to unsubscribe anytime. Sponsor This issue is sponsored by TuxSEO β your AI content team on auto-pilot. Plan and ship SEO content faster Generate practical, publish-ready drafts Keep your content pipeline moving every week Projects Reckot - Speak and We make it, event management reinvent. Your Cloud Hub - YourCloudHub.ai is a technology and digital solutions company offering IT staffing and outsourcing services along with software development, website development, digital marketing. From the Community Django Apps vs Projects Explained: A Complete Production Guide - DEV Community Building a Seamless JWT Onboarding Flow with React Router v7 and Django - DEV Community How to Show a Waitlist Until Your Wagtail Site Is Ready Support You can support this project by using one of the affiliate links below. These are always going to be projects I use and love! No "Bluehost" crap here! Buttondown - Email newsletter β¦