Django community: RSS
This page, updated regularly, aggregates Community blog posts from the Django community.
-
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 … -
Human.json
I have seen more and more people talk about human.json lately and I think it is a pretty neat idea. From what I can tell it checks all the boxes I would expect from a protocol like this. The fact that it relies on browser extensions right now makes sense, but might become a limiting factor in future. Or the number of extensions needs to go up beyond the two easy ones and come to mobile as well. I am not sure this will be going anywhere beyond a few enthusiastic people, but you never know. Implementing the protocol was not much work, which is expected considering it only consists of two required values and an optional list of two more values. If you want to add it to your Django based site, I packaged everything up and you can find it on PyPI. Should you use the package? Eh, that is not an easy question. From a supply chain perspective I would say "no". It is only a few lines of code. But you never know how the protocol will evolve, so things might look more complicated in a month. I will do my best to keep up with … -
Wagtail Routable Pages and Layout Configuration
If you are familiar with Wagtail CMS for Django, you know that you can create Wagtail pages and control their content and layout with blocks inside of stream fields. But what if you have entries coming from normal Django models through a routable page? In this article, I will explore how you can control the dynamic layout of a detail view in a routable page. Routable pages in Wagtail are dynamic pages of your CMS page tree that can have their own URL subpaths and views. You can use them for filtered list and detail views, multi-step forms, multiple formats for the same data, etc. Here I will show you a routable ArticleIndexPage with a list and detail views for Article instances rendering the detail views based on the block layout in a detail_layout stream field. 1. Project Setup Create a Wagtail project myproject and articles app: pip install wagtail wagtail start myproject cd myproject python manage.py startapp articles Add to INSTALLED_APPS in your Django project settings: INSTALLED_APPS = [ ... "wagtail.contrib.routable_page", # required for RoutablePage "myproject.apps.articles", ] 2. File Structure The articles app: myproject/apps/articles/ ├── __init__.py ├── apps.py ├── models.py # Article, Category, ArticleIndexPage ├── blocks.py # All StreamField … -
How to Show a Waitlist Until Your Wagtail Site Is Ready
This year, I want to bring my centralized gamified donation platform www.make-impact.org to life (at least technically). Earlier I had the version I was developing separate from the waiting list, but I decided to merge them and have a switch between the waitlist and an early preview. This allows me to have no data duplication, the possibility to create user accounts immediately, and saves hosting and maintenance costs. This guide walks through a pattern that lets you ship a temporary waitlist page while your Wagtail site is still being built, with the ability to show your progress to chosen people. If you are building a Software as a Service (SaaS) or a web platform with Django, this article is for you. The Concept A custom start page view will check for a specific cookie value. If it is unset, the visitor will be redirected to a waitlist form at /waitlist/. If it is set, the visitor will be served the Wagtail home page. All views under development will have a decorator that checks the cookie value and redirects to the start page if it is unset. There will be a special view at /preview-access/ with a passphrase form that allows … -
Django News - Sunsetting Jazzband - Mar 20th 2026
News Sunsetting Jazzband After more than a decade maintaining 80+ Python projects, Jazzband is winding down as AI-generated spam and long-standing sustainability challenges make its open, shared-maintenance model no longer viable. jazzband.co Astral to join OpenAI Astral, creators of Ruff and uv, are joining OpenAI’s Codex team to push the future of AI-powered Python development while continuing to support their open source tools. astral.sh Wagtail CMS News Wagtail Security team no longer accepts GPG-encrypted emails Wagtail’s security team has dropped GPG-encrypted email support, citing zero real-world use and modern encryption making it unnecessary while simplifying their workflow. wagtail.org 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 a first-time contributor! Congratulations to dcsid for having their first commits merged into Django - welcome on board! The undocumented get_placeholder method of Field is deprecated in favor of the newly introduced get_placeholder_sql method, which has the same input signature but is expected to return a two-elements tuple composed of an SQL format string and a tuple of associated parameters. This method should now expect to be provided expressions meant to … -
OpenAI Acquiring Astral: A 4th Option for Funding Open Source
Thoughts on the recent acquisition and what it portends for open source software. -
PyCon US 2026 - Elaine Wong & Jon Banafato
🔗 Links PyCon US website Volunteer mailing list Elaine on LinkedIn and Jon's personal site 🎥 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 sixfeetup.com. -
Tombi, pre-commit, prek and uv.lock
In almost all my Python projects, I'm using pre-commit to handle/check formatting and linting. The advantage: pre-commit is the only tool you need to install. Pre-commit itself reads its config file and installs the formatters and linters you defined in there. Here's a typical .pre-commit-config.yaml: default_language_version: python: python3 repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v6.0.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer - id: check-yaml args: [--allow-multiple-documents] - id: check-toml - id: check-added-large-files - repo: https://github.com/astral-sh/ruff-pre-commit # Ruff version. rev: v0.15.6 hooks: # Run the linter. - id: ruff args: ["--fix"] # Run the formatter. - id: ruff-format - repo: https://github.com/tombi-toml/tombi-pre-commit rev: v0.9.6 hooks: - id: tombi-format args: ["--offline"] - id: tombi-lint args: ["--offline"] The "tombi" at the end might be a bit curious. There's already the build-in "check-toml" toml syntax checker, right? Well, tombi also does formatting and schema validation. And in a recent project, I handled configuration through toml files. It was for a Django website where several geographical maps were shown, each with its own title, description, legend yes/no, etcetera. I made up a .toml configuration format so that a colleague could configure all those maps without needing to deal with the python code. I created a json … -
Built with Django — Weekly Roundup (Mar 09–Mar 16, 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 Table of Contents Generator - Generate a clickable Table of Contents for any PDF in seconds. Free, private, no account required. Works with reports, eBooks, manuals, and papers. Jobs Senior Frontend Engineer at Weave Bio From the Community Django Admin: Building a Production-Ready Back Office Without Starting From Scratch | Medium by Anas Issath Beginner's Guide to Open Source Contribution | Djangonaut Space 2026 - DEV Community Django Tutorial - GeeksforGeeks 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 tool I use to send you … -
How I deploy my projects to a single VPS with Gitea, NGINX and Docker
Hello everyone 👋 A few weeks ago, the team behind Jmail (a Gmail-styled interface for browsing the publicly released Epstein files) shared that they had racked up a $46,485 bill on Vercel The site had gone viral with ~450 million pageviews, and Vercel’s pricing structure turned that into a five-figure invoice. Vercel’s CEO ended up covering the bill personally, which is nice, but not exactly a scalable solution 😅 When I saw that story, my first thought was: this is an efficiency problem. Jmail is essentially a search interface on top of mostly static content. An SRE on Hacker News mentioned they handle 200x Jmail’s request load on just two Hetzner servers. The whole thing could have been served from a moderately sized VPS for a fraction of the cost. That got me thinking about my own setup. I run everything on a single VPS: my blog, my side projects, my git server, analytics, a wiki, a forum, a secret sharing tool, and more. The whole thing is held together by NGINX, Gitea, some bash scripts, and Docker. No Kubernetes, no Terraform, no CI/CD platform with a $500/month bill. Just a cheap VPS, some config files, and a deployment flow … -
10 Years of Jazzband
Jazzband is sunsetting. Before moving on, here’s a look at what 10 years of cooperative coding actually looked like. By the numbers Five years in, we had about 1,350 members and 55 projects. Here’s where things stand now: Members 3,135 total members over the years 2,133 members currently – a 68% retention rate over 10 years New members every year, peaking at 424 in 2022 Members who left stayed an average of 510 days Based on GitHub profiles (only ~28% of members list a location), members from at least 56 countries across every continent but Antarctica – 36% Europe, 30% Asia, 22% North America, 7% South America, 3% Africa, 1% Oceania. Real numbers are likely higher. And given how widely Python is used in research, someone on Antarctica has probably pip-installed a Jazzband project at some point Projects 84 projects total, 71 still active 13 projects left again over the years ~93,000 GitHub stars across all projects ~16,000 forks Activity ~43,800 commits across all repositories ~15,600 pull requests ~12,200 issues Releases 1,429 package uploads via Jazzband’s release pipeline 1,312 releases to PyPI across 56 projects and 390 versions 281 MB of release artifacts total First upload in November 2017, most … -
Wind-Down Plan
This post outlines the plan for winding down Jazzband. If you haven’t read them yet, see the sunsetting announcement for context on why this is happening, and the 10-year retrospective for the full story. Timeline The wind-down will happen in phases over the course of 2026. Phase 1: Announcement (March 2026) New member signups are disabled immediately This announcement and wind-down plan are published Existing members retain access to the GitHub organization and all repositories Phase 2: Outreach (March – May 2026) All 80 project leads will be contacted via email to discuss transferring their projects The goal is to have initial conversations with every lead before PyCon US 2026 (May 13–19 in Long Beach, CA) Leads who don’t respond will be followed up with at PyCon US and through other channels Phase 3: Project Transfers (June – December 2026) Projects will be transferred out of the Jazzband GitHub organization to their new homes – whether that’s a lead’s personal account, a new organization, or another collaborative group For each project, the transfer includes: GitHub repository: transferred to the new owner PyPI package ownership: existing maintainers added, Jazzband credentials removed CI/CD configuration: updated to work outside Jazzband Projects without an … -
Sunsetting Jazzband
Over 10 years ago, Jazzband started as a cooperative experiment to reduce the stress of maintaining Open Source software projects. The idea was simple – everyone who joins gets access to push code, triage issues, merge pull requests. “We are all part of this.” It had a good run. More than 10 years, actually. But it’s time to wind things down. What happened There’s a short answer and a long answer. The slopocalypse GitHub’s slopocalypse – the flood of AI-generated spam PRs and issues – has made Jazzband’s model of open membership and shared push access untenable. Jazzband was designed for a world where the worst case was someone accidentally merging the wrong PR. In a world where only 1 in 10 AI-generated PRs meets project standards, where curl had to shut down its bug bounty because confirmation rates dropped below 5%, and where GitHub’s own response was a kill switch to disable pull requests entirely – an organization that gives push access to everyone who joins simply can’t operate safely anymore. The one-roadie problem But honestly, the cracks have been showing for much longer than that. Jazzband was always a one-roadie operation. People asked for more roadies and offered … -
Django News - 21 PRs in One Week to Django Core! - Mar 13th 2026
News The Call for Proposals for DjangoCon US 2026 has been extended one week! DjangoCon US 2026 has extended its Call for Proposals deadline by one week to March 23 at 11 AM CDT, giving prospective speakers a little more time to submit their talk ideas. djangocon.us CPython: 36 Years of Source Code An analysis of the growth of CPython's codebase from its first commits to the present day python.org Releases Python 3.15.0 alpha 7 Python 3.15.0 alpha 7 introduces explicit lazy imports, a new frozendict type, improved profiling tools, and JIT upgrades that deliver modest performance gains while development continues toward the upcoming beta. python.org Django Software Foundation DSF member of the month - Theresa Seyram Agbenyegah Theresa Seyram Agbenyegah features as DSF member of the month for March 2026, highlighting her Django community leadership and PyCon organization work. djangoproject.com Updates to Django Today, "Updates to Django" is presented by Johanan from Djangonaut Space! 🚀 Last week we had 21 pull requests merged into Django by 11 different contributors - including 2 first-time contributors! Congratulations to KhadyotTakale and Lakshya Prasad for having their first commits merged into Django - welcome on board! This week's Django highlights: Fixed TypeError in … -
Weeknotes (2026 week 11)
Weeknotes (2026 week 11) Last time I wrote that I seem to be publishing weeknotes monthly. Now, a quarter of a year has passed since the last entry. I do enjoy the fact that I have published more posts focused on a single topic. That said, what has been going on in open source land is certainly interesting too. LLMs in Open Source I have started a longer piece to think about my stance regarding using LLMs in Open Source. The argument I’m thinking about is that there’s a balance between LLMs having ingested all of my published open source code and myself using them now to help myself and others again. The happenings in the last two weeks (think Pentagon, Iran, and the bombings of schools) have again brought to the foreground the perils of using those tools. I therefore haven’t been motivated to pursue this train of thought for the moment. When the upsides are somewhat questionable and tentative and the downsides are so clear and impossible to miss, it’s hard to use my voice to speak in favor of these tools. That said, all the shaming when someone uses an LLM that I see in my Mastodon … -
From Kenya to London with Django - Velda Kiara
🔗 Links Velda at RevSys Velda’s Substack: The Storyteller's Byte Tales Velda on GitHub Optimal Performance Over Basic as a Perfectionist with Deadlines More about me Neapolitan 📦 Projects django-linkcheck adamghill/django-lsp django-debug-toolbar 📚 Books A History of the Bible by John Barton Python Mastery, a course from David Beazley Kite Runner by Khaled Hosseini 🎥 YouTube YouTube Sponsor This episode was brought to you by Buttondown, the easiest way to start, send, and grow your email newsletter. New customers can save 50% off their first year with Buttondown using the coupon code DJANGO. -
The highs and lows of running a business
The past few weeks have been both amazing and frustrating. If you listen/read to my weekly in‑progress reports have already I mentioned some of this. In the last week of February, I appeared on the Django Chat podcast, which was released to positive feedback. I considered that a personal win for my career, it was fun to chat with Will and Carlton and hope to do more like this in future. However, two days after the episode aired, I recieved news that a client had passed away, causing that income source to vanish overnight. My condolences go to their family and I was also in shock, personally and then from the perspecive of my business. This was especially frustrating because I thought my cashflow for 2026 was solid, and I expected to be salaried before the end of year once Hamilton Rock secures funding, which we plan on doing this year. Generally from a business perspective, income can vanish overnight, and I accept this. This risk is inherent in running a business, unlike an employed job in the UK, which offers protections in this regard. The risk and potential downside has a counter of greater flexibility. I can work where … -
Django News - Django Security Fixes, Python Releases, and New Tools - Mar 6th 2026
News Django security releases issued: 6.0.3, 5.2.12, and 4.2.29 Django 6.0.3, 5.2.12, and 4.2.29 were released to fix two security issues: URLField DoS on Windows and file permission race conditions. djangoproject.com Releases Python 3.12.13, 3.11.15 and 3.10.20 are now available! Python 3.12.13, 3.11.15, and 3.10.20 fix security and denial-of-service vulnerabilities in email, HTTP cookies, WSGI headers, XML parsing, and SSL. python.org Python Software Foundation PEP 827 – Type Manipulation PEP 827 proposes extensive type-level introspection and construction APIs in typing to enable computed types for ORMs, dataclass-style transforms, and decorator typing. python.org The Python Insider Blog Has Moved! Python Insider moved to a Git backed Markdown workflow with a static Astro site, GitHub Actions, and RSS, simplifying contributions and versioned posts. python.org Djangonaut Space News 2026 Session 6 Team Introductions! Djangonaut Space introduces the six teams for its sixth session, pairing volunteers and new contributors to collaborate on projects ranging from Django core and accessibility improvements to django CMS, BeeWare, and deployment tools. djangonaut.space Wagtail CMS News Our projects for Google Summer of Code 2026 Wagtail will mentor GSoC 2026 projects, including bakerydemo redesign, starter kit overhaul, and multilingual improvements to core and wagtail-localize for CMS contributors. wagtail.org Our roadmap … -
Smoother translations in Django
I’ve been working for roughly 5 years now in an app that is localized to Swedish, so I have built up some opinions on how to manage translation of a Django project. Here’s my list of things I do currently: Always use gettext_lazy I’ve been bitten many times by accidentally using gettext when I should have used gettext_lazy, resulting in strings that were stuck in English or Swedish randomly because a user with a specific language caused that piece of code to be imported. I realize that there are some performance implications here, but compared to stuff like database access this is tiny and has never shown up in profiler outputs, so I will gladly take this hit and avoid these bugs that tend to be hard to track down (if they even get reported by users at all!). A simple naive hand-rolled static analysis test that forbids usages of plain gettext in the code base is easy to implement and stops a whole class of bugs. Django models The Okrand setting django_model_upgrade which dynamically sets verbose_name for all fields correctly with the normal default, and on the model sets up verbose_name and verbose_name_plural. Then when you run the Okrand … -
Write the docs meetup: developers documentation, your hidden strength - Frédéric Harper
(One of my summaries of the Amsterdam *write the docs* meetup). If you have a product, you need good developer documentation. "It is an integral part of your product: one cannot exist without the other". You might have the best product, but if people don't know how to use it, it doesn't matter. What he tells developers: good documentation reduces support tickets and angry customers. You should be able to "sell" good documentation to your company: it saves money and results in more sales. Some notes on documentation contents: You need a search function. The first thing you need to add. Think about John Snow (game of thrones): "you know nothing, John Snow". Be detailed in your instructions, they'll need it. Start with the assumption that the user knows nothing about your program. Advanced users can easily skip those parts. Have a proper architecture/structure. Simply having a "home" link to get back to the start already helps. Add a "getting started" section with step-by-step instructions to get something simple running. And detailed how-to guides where you go into depth. Show a table of contents of the current page. Keep the docs of previous versions available. Take great screenshots. Docs should … -
Write the docs meetup: digital sovereignty for writers - Olufunke Moronfolu
(One of my summaries of the Amsterdam *write the docs* meetup). Full title: digital sovereignty for writers: your data, your decisions. Olufunke Moronfolu has her website at https://writerwhocodes.com/ . "Digital sovereignty is the ability to have control over your own digital destiny: the data, hardware and software that you rely on and create" (quote from the World Economic Forum). What do writers want? Mostly: to be read. For this you could for instance start looking for (commercial) blogging platforms, searching for the best one. And after a while you start looking for a different one. On and on. You can run into problems. Substack might ban your newsletter. A google workspace domain being blocked. A Medium story getting deleted without feedback. Tim Berners-Lee intended for the web to be universal and open. But now it is mostly a collection of isolated silos. There are some questions you can ask yourself to test your sovereignty. If your current platform deletes your account, is your content completely lost? Second question: can you export your work in some portable format (like markdown). If you are a technical writer, you have to do the test twice. Once for your own content and once for … -
DjangoCon 2025 The Attendee's Experience
This post is the second in a three-part series reflecting on DjangoCon US 2025. In this post, I’m reflecting on experiencing DjangoCon 2025 from the audience while serving as conference chair. -
Using tox to Test a Django App Across Multiple Django Versions
Recently, I developed a reusable Django app django-clearplaintext for normalizing plain text in Django templates. And to package and test it properly, I had a fresh look to Tox. Tox is the standard testing tool that creates isolated virtual environments, installs the exact dependencies you specify, and runs your test suite in each one — all from a single command. This post walks through a complete, working setup using a minimal example app called django-shorturl. The Example App: django-shorturl django-shorturl is a self-contained Django app with one model and one view. shorturl/models.py from django.db import models from django.utils.translation import gettext_lazy as _ class ShortLink(models.Model): slug = models.SlugField(_("slug"), unique=True) target_url = models.URLField(_("target URL")) created_at = models.DateTimeField(_("created at"), auto_now_add=True) class Meta: verbose_name = _("short link") verbose_name_plural = _("short links") def __str__(self): return self.slug shorturl/views.py from django.shortcuts import get_object_or_404, redirect from .models import ShortLink def redirect_link(request, slug): link = get_object_or_404(ShortLink, slug=slug) return redirect(link.target_url) shorturl/urls.py from django.urls import path from . import views urlpatterns = [ path("<slug:slug>/", views.redirect_link, name="redirect_link"), ] shorturl/admin.py from django.contrib import admin from .models import ShortLink admin.site.register(ShortLink) Project Layout django-shorturl/ ├── src/ │ └── shorturl/ │ ├── __init__.py │ ├── admin.py │ ├── models.py │ ├── views.py │ └── urls.py ├── …