Is there an easy way to rename a project? I tried to rename the folder, but it didn't work.
-
3For future reference, you can minimize this difficulty by using explicit relative imports in your code (e.g. `from .models import MyModel`). This is the approach recommended in the book *Two Scoops of Django*. – Kevin Christopher Henry Aug 18 '13 at 06:47
7 Answers
Renaming the project is actually easier than renaming an app. This question explains how to rename an app.
To rename the project, you need to change the project name wherever it appears. grep -nir oldname .
can help you find where it appears. In my case, I had to change the following places:
Rename the
oldprojectname
directory tonewprojectname
manage.py
: Changeos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'oldprojectname.settings')
newprojectname/wsgi.py
: Changeos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'oldprojectname.settings')
newprojectname/settings.py
: ChangeROOT_URLCONF = 'oldprojectname.urls'
and changeWSGI_APPLICATION = 'oldprojectname.wsgi.application'
newprojectname/urls.py
: Change oldprojectname in a line I had added

- 5,969
- 4
- 37
- 46
-
6Also, don't forget to change the database name if it is somehow related to the `oldprojectname` as it was in my case. – VnC Oct 23 '19 at 16:31
-
2...and the whole process can be simplified by using the search and replace function in repository from your code editor. – Olfredos6 May 31 '20 at 07:33
-
-
For PostgreSQL you could do this https://www.postgresqltutorial.com/postgresql-rename-database/ – VnC Feb 08 '21 at 15:45
-
-
2**newprojectname/asgi.py** needs the same modifications as **newprojectname/wsgi.py**. – arcanemachine Oct 14 '21 at 23:54
very simple and efficient
add this command to any app in your project like this ,
# app/management/commands/renameproject.py
import os
import glob
from django.conf import settings
from django.core.management.base import BaseCommand, CommandError
class Command(BaseCommand):
help = 'Renames the Project'
def add_arguments(self, parser):
parser.add_argument('old', nargs='+', type=str, help="current project name")
parser.add_argument('new', nargs='+', type=str, help="new project name")
def handle(self, *args, **options):
old = options["old"][0]
new = options["new"][0]
base = str(settings.BASE_DIR)
projectfiles = []
managefile = os.path.join(base, "manage.py")
projectfiles.append(managefile)
projectfiles += glob.glob(os.path.join(base, old, "*.py"))
projectfiles += glob.glob(os.path.join(base, old, "**", "*.py"))
for pythonfile in projectfiles:
with open(pythonfile, 'r') as file:
filedata = file.read()
filedata = filedata.replace(old, new)
with open(pythonfile, 'w') as file:
file.write(filedata)
os.rename(os.path.join(base, old), os.path.join(base, new))
Now just run this command
python manage.py renameproject oldname newname
have fun
How it works:
Searches .py files across the project and replaces the old name with new.

- 635
- 1
- 9
- 16
-
6While this code may answer the question, providing additional context regarding how and/or why it solves the problem would improve the answer's long-term value. – Tomer Shetah Oct 13 '20 at 08:57
-
To rename a Django project, you need to change the project name wherever it appears.
First of all, rename both outer and inner project directory name from old_project_name to new_project_name
So if the project directory looks like this :
old_project_name // outer project directory old name
old_project_name// inner project directory old name
--__init__.py
--asgi.py
--settings.py
--urls.py
--wsgi.py
app_name // any app u created in the project
db.sqlite3
manage.py
then change to this :
new_project_name // outer project directory new name
new_project_name// inner project directory new name
--__init__.py
--asgi.py
--settings.py
--urls.py
--wsgi.py
app_name // any app u created in the project
db.sqlite3
manage.py
In 2021 with Django version 3.2.3, there are in total 9 places (including comments and codes both) in 5 files where the name of the project appears, which are :
In
new_project_name/asgi.py
file (comment) :ASGI config for old_project_name project.
In
new_project_name/asgi.py
file (code) :os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'old_project_name.settings')
In
manage.py
file (code) :os.environ.setdefault('DJANGO_SETTINGS_MODULE', old_project_name.settings')
In
new_project_name/settings.py
file (comment) :Django settings for old_project_name project.
In
new_project_name/settings.py
file (code) :ROOT_URLCONF = 'old_project_name.urls'
In
new_project_name/settings.py
(code) :WSGI_APPLICATION = 'old_project_name.wsgi.application'
In
new_project_name/urls.py
file (comment) :old_project_name URL Configuration
In
new_project_name/wsgi.py
file (comment) :WSGI config for old_project_name project.
In
new_project_name/wsgi.py
file (code) :os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'old_project_name.settings')
Note : To change the old_project_name to new_project_name in the files you can use your IDE 's/ text editor's find & replace function to avoid any errors.
Tip : If you haven't done much work in the project then its better to create a new Django project and then just copy and paste the code which don't need any changes rather than changing project name.

- 2,422
- 2
- 16
- 30
I think the best solution here is to simply open your settings.py, urls.py, views.py and any other file that might rely on your project's name and then use the find&replace function in your text editor.
Or, if you haven't done much work yet, start a new project with django-admin.py and copy/paste.

- 3,632
- 3
- 28
- 43
-
1[Ack](http://beyondgrep.com/) should be helpful for finding all those pesky instances of the name in the code. – meshy Aug 17 '13 at 22:39
-
Starting a new project and copy pasting was so much easier in our case. – Tom 'Blue' Piddock May 13 '20 at 10:43
As a beginner with Python and Django, the below simple steps worked for me.
Update both outer and inner folder names in your project (directly from windows explorer or from any editor like visual studio)
Search and replace your old project name with new one in below project files
a. manage.py
b. settings.py
c. wsgi.py
d.asgi.py
e. urls.pyRestart server and confirm if everything works fine again

- 11
- 1
Actually what you have to do is this:
- Open your project in any code editor like Sublime or VSCode
- Search for your current project name
- In the replace box enter the new project folder name that you want.
- Now the code editor will automatically search in the whole project folder and will replace the current project name with the new name.
- Now just rename the main app name which is in your project folder
- You can now rename your project folder name
Thats it. Hope that helps :)

- 11
- 3
Suppose your project name is old_project_name and you want to change it to new_project_name. Also you have created an app called my_app within old_project_name. Your directory structure will be something like -
old_project_name
--old_project_name
--__init__.py
--settings.py
--urls.py
--wsgi.py
my_app
--Files and folders under my_app
db.sqlite3
manage.py
Rename both inner and outer old_project_name directory name to new_project_name. After changing your directory structure will be as something like -
new_project_name --new_project_name --__init__.py --settings.py --urls.py --wsgi.py my_app --Files and folders under my_app db.sqlite3 manage.py
Change reference to old_project_name in your project files to new_project_name. Mostly you will need to change the reference in settings.py, wsgi.py and manage.py
After these changes run local server and check if your routes are working fine.
Change git repository name. This is optional, but it is advisable as it will be easy to track your projects. If you have added your project to bitbucket or github, then login into bitbucket or github and change the repository name to new_project_name. Suppose your old repository url is
https://<yourusername>@bitbucket.org/<yourusername>/old_project_name.git
After renaming repository, your project git url will be changed to something likehttps://<yourusername>@bitbucket.org/<yourusername>/new_project_name.git>
Run in terminal
git remote -v
it will list your current remote repository url
origin https://<yourusername>@bitbucket.org/<yourusername>/old_project_name.git(fetch) origin https://<yourusername>@bitbucket.org/<yourusername>/old_project_name.git(push)
Run following command in terminal. This will change your current remote repository url
git remote set-url origin https://<yourusername>@bitbucket.org/<yourusername>/new_project_name.git
Run in terminal git remote -v It will now list something like
origin https://<yourusername>@bitbucket.org/<yourusername>/new_project_name.git(fetch) origin https://<yourusername>@bitbucket.org/<yourusername>/new_project_name.git(push)
Now you can push your new updates to your remote repository.
Update virtual environment. This is optional,but it will help to identify virtual environ mapping to project. I use virtualenvwrapper. If you are using a different one, you will have to update the commands as per your virtual environment.
Run following command in terminal. This will create a copy of old_project_name environment setting with name new_project_name.
cpvirtualenv old_project_name new_project_name
Remove old environment. This step is optional as well.
Run following command in terminal
rmvirtualenv old_project_name

- 1,024
- 13
- 26