skip to navigation
skip to content

Planet Python

Last update: September 10, 2025 04:43 PM UTC

September 10, 2025


Real Python

How to Drop Null Values in pandas

Learn how to use .dropna() to drop null values from pandas DataFrames so you can clean missing data and keep your Python analysis accurate.

September 10, 2025 02:00 PM UTC

Quiz: How to Drop Null Values in pandas

Quiz yourself on pandas .dropna(): remove nulls, clean missing data, and prepare DataFrames for accurate analysis.

September 10, 2025 12:00 PM UTC


Quansight Labs Blog

Scaling asyncio on Free-Threaded Python

A recap on the work done in Python 3.14 to enable asyncio to scale on the free-threaded build of CPython.

September 10, 2025 12:00 AM UTC

September 09, 2025


PyCoder’s Weekly

Issue #698: Capturing Stdout, REPL Color, Feature History, and More (Sept. 9, 2025)

September 09, 2025 07:30 PM UTC


Real Python

Python String Splitting

Master Python string splitting with .split() and re.split() to handle whitespace, delimiters and multiline text.

September 09, 2025 02:00 PM UTC


Python⇒Speed

Testing the compiler optimizations your code relies on

September 09, 2025 12:00 AM UTC

September 08, 2025


Python Morsels

Python REPL Shortcuts & Features

Discover the new Python REPL features introduced in Python 3.13. From keyboard shortcuts to block navigation, this reference guide will help you better utilize Python's interactive shell.

Table of contents

  1. Python REPL Keyboard Shortcuts
  2. Shortcuts You Probably Won't Use
  3. Navigating Blocks
  4. Easy Code Copying with History Mode (F2)
  5. Editing Blocks with Paste Mode (F3)
  6. The _ Variable
  7. Notable Features in the New REPL
  8. Launching the REPL
  9. Learn the Python REPL

Python REPL Keyboard Shortcuts

Let's start with the keyboard shortcuts the new Python REPL supports. This table is organized with the most useful shortcuts at the top.

Shortcut Type Action OS Support
Left Navigation Go left one character All
Right Navigation Go right one character All
Up Navigation Previous block or line All
Down Navigation Next block or line All
Ctrl+L Feature Clear screen All
Ctrl+C Feature Cancel / interrupt All
Ctrl+D Exit Exit REPL (Sends EOF) Linux/Mac
Ctrl+Z Enter Exit Exit REPL (Sends EOF) Windows
Tab Feature Autocompletion All
Alt+Enter Feature Run current code block All
Ctrl+R Feature Search upward in history All
Ctrl+A Navigation Go to beginning of line Linux/Mac
Home Navigation Go to beginning of line All
Ctrl+E Navigation Go to end of line All
End Navigation Go to end of line All
Ctrl+K Deletion Delete to end of line All
Ctrl+U Deletion Delete to start of line All
Ctrl+Left Navigation Go back one word All
Alt+B Navigation Go back one word All
Ctrl+Right Navigation Go forward one word All
Alt+F Navigation Go forward one word All
Alt+Backspace Deletion Delete to start of word All
Ctrl+W Deletion Delete to start of word All
Alt+D Deletion Delete to end of word All
F2 Feature Enter history mode All
F3 Feature Enter paste/edit mode All
F1 Feature Enter help mode All

Ctrl+A does not work in the usual Windows Command Prompt or Powershell (it selects all text instead) unless they are run within the new Windows 10 Terminal app.

On Linux and Mac, Ctrl+D can be used to exit the REPL, but on Windows you'll need to press Ctrl+Z and then press Enter afterward (to submit). Using Ctrl+D on Linux/Mac or Ctrl+Z and Enter on Windows only works when the shortcut is pressed at a blank prompt.

Note that the above shortcuts assume you are working in the new Python REPL (3.13+).

On Python 3.12 the only shortcuts above that worked on Windows are:

  • Left and Right for navigating characters
  • Up and Down for navigating line-by-line history
  • Ctrl+Z Enter for exiting
  • Ctrl+Left and Ctrl+Right for navigating words

Most of those shortcuts also worked on Python 3.12 on Linux and Mac except:

  • Up and Down only navigated line-by-line history
  • Alt+Enter did nothing
  • F2 and F3 did nothing because these modes were added in the new REPL
  • Some shortcuts (like Ctrl+U) may differ slightly in their abilities

Shortcuts You Probably Won't Use

The above list of shortcuts …

Read the full article: https://www.pythonmorsels.com/repl-features/

September 08, 2025 10:00 PM UTC


Django Weblog

Getting Started With Open Source Through Community Events

In July, I joined Raffaella Suardini and Sage Abdullah for the Djangonaut Space Space Reviewers Episode 6, where we reviewed a Django PR during a live stream. This was a fun event. I won’t get into the technical aspects of the review, and I won’t point out the many mistakes I made. Instead, I want to revisit several “getting started with open source” community events and reflect on my personal growth since I first got involved with open source.

I hope this encourages others to attend those events and similarly get involved!


Tutorial office hours 🕐

My first open source contribution happened accidentally during DjangoCon US 2023. I volunteered to host office hours to help tutorial attendees set up their development environments. I went through the tutorial projects, found a missing dependency in one of them, and reported it on the conference chat. A conference organizer, Tim Schilling, responded and suggested that I open a pull request (PR) to the project. I remember thinking to myself, “Really? I can do that?”.

Sprints 🏃

During the Sprint Days of the conference, I participated and opened two PRs to address accessibility issues. I didn’t know much about accessibility at that point, and I would not have known how to navigate the contribution process and pick out issues on my own. Thankfully, the project leaders were there to guide new contributors, and I was able to gain hands-on experience with these first few PRs.

Testathons 🧪

There was another event that took place during the Sprint Days called Testathon. I had heard of hackathons before, but I had not heard of testathons. I attended and found out they were like live stream coding or group pair programming. One person shared their screen and the group chimed in on strategies. The purpose of the testathon was to show people how to test open source projects against Django’s beta release. The code driver (or anyone else in the group) would point out what files to look for, how to run tests, and how to open PRs. Every project is slightly different, from project setup to contributing etiquette, and I learned several different things from attending 2 testathons. I loved the interactive and intimate nature of the event. It exposed me to another aspect of open source projects and contributions. I also thought it was very brave of people to share their screens and work through code together in a group. My brain would have short circuited if I were put on the spot like that!

From DjangoCon US 2023, I participated in 3 different types of events where I got hands-on experience with open source contributions, and I wanted more! I was curious about the live stream coding and group pair programming opportunities, too. This was definitely outside of my comfort zone, and I wanted to know how I could overcome my own inhibitions and participate more actively. I wanted to be able to jump into events so nonchalantly as everyone else seemed to do. (Of course, that’s the perception. Now, I know that most people feel some level of nervousness or anxiety when they are hosting or attending such events, and that’s absolutely normal.)

Djangonaut Space 🚀

When the Djangonaut Space program was announced, I jumped at the opportunity. I applied and was accepted for the first session, which took place from mid-January to early March of 2024. With the guidance of the Navigator and Captain on my team, I learned to sift through the Django’s Trac ticket management system, pick out a ticket, and I also faced my fear of posting comments publicly. The PR was merged, and it was thrilling to see my GitHub username in the history of the Django code base.

In March 2024, when the first Djangonaut Space session came to a close, Tim, a program organizer, asked if anyone was interested in hosting a “Getting Started With Contributing” event. I expressed my interest, and Tim suggested a ticket to work on. Unfortunately, I didn’t follow through. How could I host a “Getting Started With Contributing” event? First, I wasn’t sure if I even knew how to get started. Second, I wasn’t ready to lead an event and the discussions while simultaneously sharing my screen and thinking out loud. Finally, I wasn’t ready to be on camera in the public eye. Even though I had just finished the Djangonaut Space program, I hadn’t overcome my own inhibitions. I didn’t ask for guidance, and the event never materialized.

Space Reviewers 👾

About 8 months later in November 2024, Space Reviewers launched its very first episode. I thought it was such a creative format. I wanted to be a part of it. By this time, I was getting a lot of training with event organizing through my role as the Session Organizer for Djangonaut Space, but I wasn’t sure how to ask about joining the Space Reviewers crew, and maybe it was too early in the formation of the group to bring on another member.

It wasn’t until June 2025 that I finally asked if I could help out with Space Reviewers. The crew welcomed me as a new member. I started out by making a pre-recorded video, a PR Review Deep Dive, that was uploaded to the Djangonaut Space YouTube channel. I had a lot of fun recording and editing the video.

A month later, in July 2025, the crew members planned for the next episode. Raffaella scheduled time for the event and created the show notes, and I was taking on Tim’s role as a co-organizer. Because I would be managing the video stream and sharing my screen, I realized that I could be the single point of failure during the event. There was no safety element that a pre-recorded video offers. If my internet went down, or if my computer crashed, or if I stupidly clicked the wrong button, the live stream could come to a halt. It was a terrifying thought, but I took on the risks and pushed forward.

On the day of the event, there was a delay to the start time and some fumbles on my end, but overall, it was very fun and productive. People joined and shared their tips and tricks in the live chat. By the end, we were able to walk through the review process and post our comments on the PR. Looking back, I think making the pre-recorded video was a great stepping stone towards hosting the live stream.

I’m so glad I had the opportunity to work with Raffaella and Sage as part of Space Reviewers. They have a lot of insights and perspectives that I didn’t have. I had a lot of fun taking on the new challenges that came with organizing this event. Initially, I struggled internally as I tried to face some of my fears. There were moments leading up to the event where I thought to myself, “Why did I volunteer to do this???” In the end, I’m glad I did.

Personal growth 🌱

Some of the challenges I overcame might not seem like a big deal, but when I compare myself to where I was at the beginning of DjangoCon US 2023, I can see my personal growth quite prominently. Now, I know how to get started with contributing, and I am able to walk people through the process. I am also a lot more comfortable taking ownership of organizing and leading events. (I remember a time when I constantly needed to ask for permission or confirmation before executing an action.) I can brush off the fumbles I make as the camera is rolling, and I can continue on with the discussion.

When I revisit the community events that I have participated in over the past 2 years, from Space Reviewers, to Sprints, to Testathons, to Tutorial office hours, I realize how far I have come. I am also reminded of what it was like to be absolutely new to open source and to the community. Although I still feel somewhat new, I’m not a deer in headlights anymore. I’m still trying to find my place in open source, and the best way to do that is to continue showing up and continue helping out. One small PR at a time, one small review at a time. One little blog, one little video…

Let’s Get Started! 🌟

If you’re looking to contribute to open source, check out the upcoming events and programs.

It doesn’t matter if you’ve been making software for 20 years or 20 days, there are many events to help you get started with open source, and many more reasons to stick around.


Thank you to Lilian for proposing this guest post on the Django blog! Lilian was our DSF Member of the Month in August 2025. You can learn more about her at ontowhee.com and follow her writing at buttondown.com/ontowhee.

September 08, 2025 09:59 PM UTC


Real Python

The Python Documentary Celebrates History While Developer Surveys Celebrate Python

The Python documentary debuts! Explore Python's journey, 2025 survey results, explosive growth, and key September news updates.

September 08, 2025 02:00 PM UTC


Python Bytes

#448 I'm Getting the BIOS Flavor

Topics include prek, tinyio, The power of Python’s print function, and Vibe Coding Fiasco: AI Agent Goes Rogue, Deletes Company's Entire Database.

September 08, 2025 08:00 AM UTC


Wingware

Wing Python IDE Version 11.0.4 - September 8, 2025

Wing Python IDE version 11.0.4 has been released. It adds debugger and code analysis support for Python 3.14, improves Python code analysis and code warnings, and makes a number of other minor improvements.

Wing 11 Screen Shot

Downloads

Be sure to Check for Updates in Wing's Help menu after downloading, to make sure that you have the latest hot fixes.

Wing Pro 11.0.4

Wing Personal 11.0.4

Wing 101 11.0.4

Wing 10 and earlier versions are not affected by installation of Wing 11 and may be installed and used independently. However, project files for Wing 10 and earlier are converted when opened by Wing 11 and should be saved under a new name, since Wing 11 projects cannot be opened by older versions of Wing.

New in Wing 11

Improved AI Assisted Development

Wing 11 improves the user interface for AI assisted development by introducing two separate tools AI Coder and AI Chat. AI Coder can be used to write, redesign, or extend code in the current editor. AI Chat can be used to ask about code or iterate in creating a design or new code without directly modifying the code in an editor.

Wing 11's AI assisted development features now support not just OpenAI but also Claude, Grok, Gemini, Perplexity, Mistral, Deepseek, and any other OpenAI completions API compatible AI provider.

This release also improves setting up AI request context, so that both automatically and manually selected and described context items may be paired with an AI request. AI request contexts can now be stored, optionally so they are shared by all projects, and may be used independently with different AI features.

AI requests can now also be stored in the current project or shared with all projects, and Wing comes preconfigured with a set of commonly used requests. In addition to changing code in the current editor, stored requests may create a new untitled file or run instead in AI Chat. Wing 11 also introduces options for changing code within an editor, including replacing code, commenting out code, or starting a diff/merge session to either accept or reject changes.

Wing 11 also supports using AI to generate commit messages based on the changes being committed to a revision control system.

You can now also configure multiple AI providers for easier access to different models.

For details see AI Assisted Development under Wing Manual in Wing 11's Help menu.

Package Management with uv

Wing Pro 11 adds support for the uv package manager in the New Project dialog and the Packages tool.

For details see Project Manager > Creating Projects > Creating Python Environments and Package Manager > Package Management with uv under Wing Manual in Wing 11's Help menu.

Improved Python Code Analysis

Wing 11 makes substantial improvements to Python code analysis, with better support for literals such as dicts and sets, parametrized type aliases, typing.Self, type of variables on the def or class line that declares them, generic classes with [...], __all__ in *.pyi files, subscripts in typing.Type and similar, type aliases, type hints in strings, type[...] and tuple[...], @functools.cached_property, base classes found also in .pyi files, and typing.Literal[...].

Updated Localizations

Wing 11 updates the German, French, and Russian localizations, and introduces a new experimental AI-generated Spanish localization. The Spanish localization and the new AI-generated strings in the French and Russian localizations may be accessed with the new User Interface > Include AI Translated Strings preference.

Improved diff/merge

Wing Pro 11 adds floating buttons directly between the editors to make navigating differences and merging easier, allows undoing previously merged changes, and does a better job managing scratch buffers, scroll locking, and sizing of merged ranges.

For details see Difference and Merge under Wing Manual in Wing 11's Help menu.

Other Minor Features and Improvements

Wing 11 also adds support for Python 3.14, improves the custom key binding assignment user interface, adds a Files > Auto-Save Files When Wing Loses Focus preference, warns immediately when opening a project with an invalid Python Executable configuration, allows clearing recent menus, expands the set of available special environment variables for project configuration, and makes a number of other bug fixes and usability improvements.

Changes and Incompatibilities

Since Wing 11 replaced the AI tool with AI Coder and AI Chat, and AI configuration is completely different than in Wing 10, you will need to reconfigure your AI integration manually in Wing 11. This is done with Manage AI Providers in the AI menu. After adding the first provider configuration, Wing will set that provider as the default. You can switch between providers with Switch to Provider in the AI menu.

If you have questions, please don't hesitate to contact us at support@wingware.com.

September 08, 2025 01:00 AM UTC

September 07, 2025


Real Python

Quiz: Sorting Dictionaries in Python: Keys, Values, and More

Test your skills in sorting Python dictionaries by keys and values. Learn about insertion order, dictionary views, and sorting techniques.

September 07, 2025 12:00 PM UTC

Quiz: Defining and Calling Python Functions

Practice defining and calling functions in Python, including parameters, argument types, default values, and function documentation.

September 07, 2025 12:00 PM UTC

September 06, 2025


TechBeamers Python

Python Memory Tricks: Optimize Your Code for Efficiency in 2025

Learn 8 tricks to reduce memory use in Python programs. Fix memory leaks, pick better data structures, and work with large amounts of data more easily. Use tools like generators and slots with simple code examples. These tips help make your programs faster and stop MemoryErrors.

Source

September 06, 2025 07:00 PM UTC


Rodrigo Girão Serrão

uv cheatsheet

Cheatsheet with the most common and useful uv commands to manage projects and dependencies, publish projects, manage tools, and more.

This cheatsheet lists the most commonly used commands and should be more than enough for you to get started using uv. For more advanced use cases, check the uv docs and its guides.

Written for uv version 0.8.15.

Creating projects 🧱

uv init Initialise a project in the current directory
uv init myproj Initialise a project myproj in the directory myproj
uv init --app --package ... Initialise a packageable app (e.g., CLI, web app, ...)
uv init --lib --package ... Initialise a packageable library (code you import)
uv init --python 3.X ...1 Use Python 3.X for your project

Managing project dependencies 🧩

uv add requests Add requests as a dependency
uv add A B C Add A, B, and C as dependencies
uv add -r requirements.txt Add dependencies from the file requirements.txt
uv add --dev pytest Add pytest as a development dependency
uv run pytest Run the pytest executable that is installed in your project
uv remove requests Remove requests as a dependency
uv remove A B C Remove A, B, C, and their transitive dependencies
uv tree See the project dependencies tree
uv lock --upgrade Upgrade the dependencies' versions

Project lifecycle management 🔄

uv build Build your packageable project
uv publish Publish your packageable project to PyPI
uv version Check your project version
uv version --bump major Bump project major version (e.g., 0.3.2 -> 1.0.0)
uv version --bump minor --bump beta Bump minor version into a beta (e.g., 1.0.0 -> 1.1.0b1 or 1.1.0b1 -> 1.1.0b2)
uv version --bump rc Bump version into release candidate (e.g., 1.1.0b1 -> 1.1.0rc1 or 1.1.0rc1 -> 1.1.0rc2)
uv version --bump stable Turn into a stable version (e.g., 1.1.0rc1 -> 1.1.0)

Managing tools ⚒️

uv tool run pytest Run pytest in an isolated environment
uv tool run textual-demo --from textual Run the command textual-demo from the package textual
uvx ... Alias for uv tool run ...
uv tool install ruff Install ruff in an isolated environment but make it globally available
uv tool install --with dep ... Install the given tool with extra dependencies (e.g., install a tool with its plugins)
uv tool list List all tools installed
uv tool upgrade ruff Upgrade the ruff tool
uv tool upgrade --all Upgrade all tools
uv tool uninstall ruff Uninstall ruff
uv tool install -e .2 Install the current packageable project in editable mode

Working with scripts 📜

uv init --script myscript.py Initialise the script myscript.py
uv init --script myscript.py --python 3.X Initialise the script myscript.py and pin it to version 3.X
uv add click --script myscript.py Add the dependency click to the script
uv remove click --script myscript.py Remove the dependency click from the script
uv run myscript.py Run the script myscript.py
uv run --python 3.X myscript.py Run the script with the given Python version
uv run --with click myscript.py Run the script along with...

September 06, 2025 05:36 PM UTC


Hugo van Kemenade

Ready prek go!

I’ve been using prek recently as a drop-in replacement for pre-commit.

It uses uv for managing Python virtual environments and dependencies, is rewritten in Rust (because of course) and uses the same .pre-commit-config.yaml as pre-commit.

Its homepage says it’s not yet production ready, but several projects like Apache Airflow and PDM are already using it. I’ve been using it for a while and reporting issues as I find them; the maintainer is quick with fixes and releases. All the hooks I need are now supported.

Getting started #

First install using one of the many methods, then:

cd my-repo
pre-commit uninstall # remove the old hooks
prek install # install the new hooks
prek run --all-files # run all lints on all files
git commit -m "my commit" # run on the changed files in a commit

Benchmarks #

prek is noticeably quicker at installing hooks.

  • ⚡ About 10x faster than pre-commit and uses only a third of disk space.

This 10x is a comparison of installing hooks using the excellent hyperfine benchmarking tool.

Here’s my own comparison.

❯ hyperfine \
--prepare 'rm -rf ~/.cache/prek/ && rm -rf ~/.cache/pre-commit && rm -rf ~/.cache/uv' \
--setup 'prek --version && pre-commit --version' \
'prek install-hooks' \
'pre-commit install-hooks'

Results #

pre-commit prek Times faster
run --all-files 17m13s 7m59s 2.16
install-hooks 10m48s 2m24s 4.50
hyperfine 39.841s 5.539s 7.19

The hyperfine results:

Benchmark 1: prek install-hooks
 Time (mean ± σ): 5.539 s ± 0.176 s [User: 8.973 s, System: 5.692 s]
 Range (min … max): 5.231 s … 5.834 s 10 runs

Benchmark 2: pre-commit install-hooks
 Time (mean ± σ): 39.841 s ± 2.017 s [User: 19.760 s, System: 8.203 s]
 Range (min … max): 36.930 s … 43.976 s 10 runs

Summary
 prek install-hooks ran
 7.19 ± 0.43 times faster than pre-commit install-hooks

Give it a try and give it a !

Bonus #

These are the aliases I have set for pre-commit and prek:

alias pci="pre-commit install --allow-missing-config"
alias pcu="pre-commit uninstall"
alias pca="pre-commit autoupdate --jobs 0"
alias pcr="pre-commit run --all-files"
alias pki="prek install --allow-missing-config"
alias pku="prek uninstall"
alias pka="prek autoupdate --jobs 0"
alias pkr="prek run --all-files"

Where:


Header photo: AH-1G Aircraft Maintenance Test Flight Handbook and handwritten checklist for helicopters in the San Diego Air and Space Museum Archive, with no known copyright restrictions.

September 06, 2025 03:50 PM UTC

September 05, 2025


Django Weblog

DSF at EuroPython 2025: Celebrating 20 years of Django

This year, the Django Software Foundation (DSF) was invited by EuroPython to come to the event, showcase the framework and the vibrant community around it. The DSF had a booth in the community area where attendees could learn more about Django and meet maintainers.

This year was extra special: Django’s 20th birthday was right at the beginning of the conference! The milestone was marked in style, starting on Wednesday evening at Pyvo, the local Python community meetup in Prague, where we celebrated with a cake.

Collage of 4 pictures: three participants smiling; two pictures of someone holding a cake; close-up of the cake that says '20 Happy birthday Django!'. With EuroPython 2025 and Django branding in-between the pics

On Friday, the celebration continued with an open-space gathering at the conference — and, of course, another cake 🎂. For people who missed this, there are other local Django birthday events running through the rest of 2025!

Collage of 4 pictures: group photo of birthday celebrations with a cake on a table; close-up of participants; close-up of the cake; people blowing candles. With EuroPython 2025 and Django branding in-between the pics

View all local 20th birthday events

Adding to the festive atmosphere, the DSF shared stickers co-branded with their unofficial pony mascot and the EuroPython and EuroPython Society logos. These became an instant hit with attendees, combining Django’s playful mascot with EuroPython Society’s identity.

Close-up of a Django pony sticker someone is holding. The pony is smiling and wears a EuroPython Society shirt

The Django community was also active during the sprint weekend. Over two days, 21 participants worked on Django, tackling 12 issues and merging 4 pull requests. For newcomers, it was a welcoming way to start contributing; for experienced developers, it was a chance to share knowledge and push the project forward together.

Collage of 3 pictures: sprint participants all around a table working together with laptops; 3 people troubleshooting together; Tom looking thoughtful. With EuroPython 2025 and Django branding in-between the pics.

We asked the members of the Django Software Foundation attending EuroPython how they liked EuroPython and this is what they said: 

The talks and tutorials were so great and I got to witness amazing projects from this community. This was my first EuroPython conference and let me tell you, this community over-delivered. It was also my first time organizing Django Girls outside Africa. Django Girls Prague was amazing.

Doreen Nangira - Django Girls organizer


Just the perfect mixture of catching up with people I know, meeting people I don’t know, learning new things. Time well spent chatting w/ Python veterans and also first-timers. Volunteering there was ACE, and I’m thankful we got to have a booth and birthday cake for Django 🎂

Thibaud Colas - President, Django Software Foundation


It was my first EuroPython, it felt really special! I was surrounded by wonderful people, and it was an amazing experience to volunteer at our community booth.

Raffaella Suardini - Djangonaut Space organizer

We’re delighted the DSF joined us this year. If you’re part of a foundation and would like to have a booth at EuroPython, keep an eye out for our Call for Communities next year.


Thank you to EuroPython Vice Chair and DSF Individual member Mia Bajić for reporting back on the event ❤️. And thank you to our volunteers Tom Carrick, Thibaud Colas, Raffaella Suardini, and Alex Gómez who represented our foundation at the conference. As well as to Doreen Nangira who ran the Django Girls+ workshop at the conference!

September 05, 2025 02:02 PM UTC


Real Python

The Real Python Podcast – Episode #264: Large Language Models on the Edge of the Scaling Laws

What's happening with the latest releases of large language models? Is the industry hitting the edge of the scaling laws, and do the current benchmarks provide reliable performance assessments? This week on the show, Jodie Burchell returns to discuss the current state of LLM releases.

September 05, 2025 12:00 PM UTC


EuroPython

Django Software Foundation at EuroPython 2025: Celebrating 20 Years of the Django framework

At EuroPython, we’re always glad to welcome friends from other foundations. This year, the Django Software Foundation (DSF) joined us to showcase the framework and the vibrant community around it.

The DSF had a booth in the community area where attendees could learn more about Django and meet

September 05, 2025 09:09 AM UTC


Brian Okken

Python People podcast now at pythontest.com/pythonpeople

Like the recent archival of Test and Code, the Python People podcast has also moved. Python People is now at pythontest.com/pythonpeople.

Is it also archived? As in done?

I don’t think so. I think I might start that up again at some point.

But for now, it’s on a long-ish term pause.

BTW, the RSS feeds for both Python People and Test and Code should be redirected correctly, so you shouldn’t have to change anything in your podcast player.

September 05, 2025 12:00 AM UTC

September 04, 2025


Trey Hunner

Customizing your Python REPL's color scheme (Python 3.14+)

September 04, 2025 07:42 PM UTC


Django Weblog

Last call for DjangoCon US 2025 tickets!

DjangoCon US starts next week in Chicago, IL on September 8-12th, 2025!

With three amazing keynotes and over fifty presentations over three days, join us in person or online where you can watch presentations on your own schedule or stream live with us during the live event.

Can't make it to Chicago? Our online tickets give you the best of both worlds. Watch live as it happens or catch up on your own schedule – all talks will be available to stream throughout the conference and beyond. You'll get the same great content, participate in online discussions, and join our vibrant community from wherever you are. Plus, with two days of virtual sprints alongside our in-person sprints, online attendees can contribute to Django projects and collaborate with the community just like everyone else.

Join DjangoCon US online

Get your ticket today before it's too late! Check out the full schedule, visit 2025.djangocon.us for more details, or contact us at hello@djangocon.us with any questions.

September 04, 2025 05:01 PM UTC

Keyboard shortcuts in Django via GSoC 2025

This summer I participated in the Google Summer of Code program with Django. My work focused on introducing keyboard shortcuts to the Django admin interface which led to a new package: django-admin-keyshortcuts.

Proposal and Community Discussions

My original GSoC proposal was to improve the existing django-admin-keyboard-shortcuts package maintained by one of my mentors, Tom. The plan was to fix bugs, add new keyboard shortcuts, build a command palette, and eventually merge these features into Django's core admin. I initially thought getting my GSoC proposal accepted meant I could dive straight into coding. But Tom explained that Django has its own process for new features, which starts off with community discussions.

After posting on the forum and gathering feedback, we decided to focus on keyboard shortcuts only, and continue exploring that in packages rather than target Django core immediately. This way the feature can be tested and improved more quickly without waiting on Django's long release cycle.

The accessibility team helped drafting keyboard shortcuts outlining key requirements and expected outcomes, in particular making sure shortcuts would be widely compatible with browsers and assistive technologies. That document served as the base for developing django-admin-keyshortcuts.

django-admin-keyshortcuts

This package adds useful keyboard shortcuts to the Django admin interface. The goal is to make the Django admin interface faster to navigate and more accessible to keyboard-first users. Here are some of the shortcuts we have added so far:

The package also comes with a keyboard shortcuts dialog, crucial so users of the admin can discover those new features:

Screenshot of the keyboard shortcuts dialog displayed as a modal over the Django admin interface. It displays 6 shortcuts

Developers can also define custom shortcuts by extending admin templates. Detailed instructions can be found in the package's README.

Under the hood, the package uses the hotkey library for handling shortcuts. The library seems to be well maintained (compared to other alternatives) and is used for keyboard shortcuts in GitHub.

What's next

We have made a lot of progress, but there's still work to do before we can push to merge this functionality inside Django core.

Implementation issues

Right now, there are a couple of known problems:

To address these we may wait for the hotkey library maintainers to implement the necessary fixes, or look for alternatives.

Gather feedback

We want more users to try it out! Testing in different scenarios will help find bugs faster and improve the package. The default shortcut set is also small, we need feedback to determine which shortcuts are most useful. We also plan to list the package on a new "Experiments" section on the new Django Ecosystem page to make it more visible.

But for now, try it out and let us know what you think! We have a static admin demo for people to directly try the shortcuts. Or install django-admin-keyshortcuts to test it on your own project.

Try the new shortcuts

Let us know what you think over on the Django Forum!

September 04, 2025 03:02 PM UTC


Seth Michael Larson

Extracting NES & N64 ROMs from Zelda Collector's Edition

September 04, 2025 12:00 AM UTC


Stéphane Wirtel

Utilisation d'Obsidian comme source pour Hugo

Au début juillet, dans mon précédent post Utilisation d’Obsidian pour Hugo , j’expliquais que je regardais comment utiliser Obsidian comme source pour mon blog. Jusqu’ici, j’écrivais mes posts dans VS Code ou NeoVim, mais comme Hugo repose sur du Markdown, l’idée d’utiliser directement Obsidian s’est imposée assez naturellement : tout centraliser dans un seul outil, mes notes et mes articles.

L’avantage est que j’ai toutes mes données dans un seul et unique endroit, donc je n’ai plus besoin de rechercher mes infos pour écrire mon article et l’écriture devient plus fluide, car tout est à portée de main.

September 04, 2025 12:00 AM UTC