Published 2021-02-12.
Last modified 2021-03-29.
Time to read: 2 minutes.
django
collection.
General Django-oscar
notes are written up separately.
Mozilla Developer Network
The Django documentation is uneven, with some parts being well written, while others are quite poor. In particular, the Django Frobshop tutorial is low quality. The Mozilla Developer Network (MDN) has a much better Django tutorial.
Django Flowchart
Bash Tab Completion
Tab completion for django-admin
and manage.py
can be enabled as follows.
$ wget -O ~/django_bash_completion \ https://raw.githubusercontent.com/django/django/master/extras/django_bash_completion $ echo "source django_bash_completion" >> .bashrc $ source ~/django_bash_completion
Tab completion for django-admin
and manage.py
in derivative projects, such as django-oscar
, is automatic.
Initial Project Creator Script
#!/bin/bash function help { echo "$(dirname $0) - Create a new django project with a matching Python virtual environment. Installs the latest stable release of Django in the new Python venv, which has the same name as the new Django webapp. This means that all of the pip modules in the new Python venv exactly match the requirements of the new Django webapp. A Django app is also created with the same name as the Django webapp itself. Usage: $(dirname $0) newDjangoWebAppName ... then navigate to http://127.0.0.1:8000/ and view the standard Django initial welcome page. " exit 1 } if [ -z "$1" ]; then help; fi # Create a virtual environment in subdirectory "venv" for this Django project python -m venv "$1" source "$1" /bin/activate # Activate it pip install Django # Install the latest stable release # pip install Django==2.1 # Install a specific version django-admin startproject "$1" # create the Django project python ./manage.py migrate # run migrations python ./manage.py createsuperuser # create a super user if [[ `service postgresql status` == **down ]]; then sudo service postgresql start fi ./python manage.py runserver --noreload $* 0.0.0.0:8000 # start the development server
Settings for Production, Development, Testing, and Continuous Integration
Django has a simple and effective mechanism for establishing settings for various environments.
Common environments include production (prod
), development (dev
), testing (test
),
and continuous integration (ci
).
The Frobshop tutorial just sets up one settings environment.
The process necessary to refine that collection of settings into multiple environments is
well documented
and easy to work through.
Site Map
Sitemaps support is built into Django.
However, Matthias Kestenholz wrote the django-sitemaps
PIP module
which also features alternates
(alternates allow communicating the pages that contain the same content in different languages).
Tutorials:
- Django - Sitemap Tutorial
- Creating a sitemap index in Django.
- Sample project using
django-sitemaps
.
Django-robots
generates the robots.txt exclusion file for Django.
This PIP modules complements the Django sitemaps.
Variables and Filters
The syntax for defining and using Django variables is almost identical to the syntax for using Jekyll / Liquid variables.
Similarly, Django filter syntax is identical to Jekyll / Liquid filter syntax.
BASE_DIR Setting
It is common to set up a Django project for dev
, prod
and perhaps test
settings.
These settings usually inherit from base
settings, which are defined in a file called your_django_webapp/your_app/settings/base.py
.
Within base.py
, BASE_DIR
might be defined like this:
BASE_DIR = Path(__file__).resolve().parent.parent.parent
The shell
subcommand to manage.py
accepts a line to be interpreted by using the -c
option.
Here is a one-line solution that displays BASE_DIR
for a Django app called frobshop
:
$ ./manage.py shell -c \ 'from frobshop.settings import base; print(f"BASE_DIR={base.BASE_DIR}")' BASE_DIR=/var/work/django/frobshop