Activate Django's manage.py commands completion in Bash in 2 steps

Python Manage.py
Image: Python Manage.py (License: CC-BY-SA Marcelo Canina)

Use TAB key complete feature in Linux Bash console

Published:
Last modified:
Tags Django , Bash , Complete

Overview

One of the best features of Django CMS is to have a wide set of commands to manage your web application from console.

One of the things that Linux users miss when working with a clean instance of Django is the ability of pressing the TAB key while writing a command to autocomplete them or presing TAB key twice to see all the available options.

In this tutorial we will enable such feature.

1. Install

Bash completion feature works by having a special script that uses the three builtin commands that are available to manipulate the programmable completion facilities, they are:

  • compgen
  • complete
  • compopt

For each program, there should be a script that uses them to properly enable the autocompletion feature, in Django this file is located in a special directory in main repository, not included in the delivered project by default, it is located at: https://github.com/django/django/master/extras/django_bash_completion

We first start by downloading this file into ~/local/share/django/extras directory, so in this case mkdir -p ~/local/share/django/extras would create the needed path.

Then downloading it and posting in the above directory wget -O ~/local/share/django/extras/django_bash_completion.sh https://raw.github.com/django/django/master/extras/django_bash_completion.


$ mkdir -p ~/local/share/django/extras
$ wget -O ~/local/share/django/extras/django_bash_completion.sh https://raw.github.com/django/django/master/extras/django_bash_completion
--2022-09-09 17:57:29--  https://raw.github.com/django/django/master/extras/django_bash_completion
Resolving raw.github.com (raw.github.com)... 185.199.110.133, 185.199.109.133, 185.199.108.133, ...
Connecting to raw.github.com (raw.github.com)|185.199.110.133|:443... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://raw.githubusercontent.com/django/django/master/extras/django_bash_completion [following]
--2022-09-09 17:57:30--  https://raw.githubusercontent.com/django/django/master/extras/django_bash_completion
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.111.133, 185.199.109.133, 185.199.108.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.111.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2240 (2,2K) [text/plain]
Saving to: ‘/home/marcanuy/local/share/django/extras/django_bash_completion.sh’

/home/marcanuy/local/share/django/ext 100%[=======================================================================>]   2,19K  --.-KB/s    in 0,003s  

2022-09-09 17:57:31 (740 KB/s) - ‘/home/marcanuy/local/share/django/extras/django_bash_completion.sh’ saved [2240/2240]

2. Sourcing the file

Now we need to source the downloaded script, so the autocompletion is loaded into our console.

To make it available in our console we just run source ~/local/share/django/extras/django_bash_completion.sh.

But there is a good chance that there is a virtual environment for each project, so depending in what type of virtual environment you are using you can load it at different places:

2.1 Manual

If you load your virtual environment manually, e.g.: source ~/.virtualenvs/MY-PROJECT/bin/activate, with a simple script in you project root like activate.sh:

#!/bin/bash
source ~/.virtualenvs/MY-PROJECT/bin/activate
source ~/local/share/django/extras/django_bash_completion.sh

And then load your virtual environment by executing source activate.sh

2.2. Using virtualenvwrapper

For virtualenvwrapper, add source ~/local/share/django/extras/django_bash_completion.sh in the post_activate.sh script.

Conclusion

After doing this simple installation, each type we press the TAB key while executing a command with python manage.py TAB it will load the list of available commands or autocomplete accordingly.

Resources

Uruguay
Marcelo Canina
I'm Marcelo Canina, a developer from Uruguay. I build websites and web-based applications from the ground up and share what I learn here.
comments powered by Disqus


This article shows how to add a bash completion script for Django's manage.py command.

Clutter-free software concepts.
Translations English Español

Except as otherwise noted, the content of this page is licensed under CC BY-NC-ND 4.0 . Terms and Policy.

Powered by SimpleIT Hugo Theme

·