Last active
February 21, 2024 07:48
-
-
Save kalafut/42bd31b2fdbf7a225da94e320d3e29ba to your computer and use it in GitHub Desktop.
Simple creation of a single-app django project
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# | |
# Simple creation of a single-app django project, as described in: https://zindilis.com/posts/django-anatomy-for-single-app/ | |
# | |
# ./django_init foo | |
# | |
# This will result is the following flat structure: | |
# | |
# . | |
# └── foo | |
# ├── manage.py | |
# ├── settings.py | |
# ├── urls.py | |
# ├── foo | |
# │ ├── __init__.py | |
# │ ├── admin.py | |
# │ ├── apps.py | |
# │ ├── migrations | |
# │ │ └── __init__.py | |
# │ ├── models.py | |
# │ ├── tests.py | |
# │ └── views.py | |
# └── wsgi.py | |
# | |
# Note: this script assumes a GNU-compatible sed is installed. On macOS you can get this easily with Homebrew. | |
prj=$1 | |
django-admin startproject $prj | |
cd $prj | |
mv $prj/* . | |
rm __init__.py | |
rm -rf $prj | |
sed -i 's/'"${prj}"'\.settings/settings/g' manage.py wsgi.py | |
sed -i 's/'"${prj}"'\.urls/urls/g' settings.py | |
sed -i 's/'"${prj}"'\.wsgi\.application/wsgi.application/g' settings.py | |
sed -i '/BASE_DIR = /s/Path(__file__).resolve().parent.parent/Path(__file__).resolve().parent/' settings.py | |
sed -i 's/'"${prj}"'\.wsgi\.application/wsgi.application/g' settings.py | |
./manage.py startapp ${prj} |
For anyone coming across this now, creating a new project still works with the latest version of Django.
Thank you for investigating this- I have had a hellacious time organizing a single-app project of mild-to-moderate complexity, and while it already existed, so the script didn't come in handy, the organization you've pointed out above has worked wonders for me in dev & prod.
Thanks for the verification!
It should be noted that you still need to add ${prj} to INSTALLED_APPS for things like models to be detected.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
No problem, I tested on the latest django.