Using a settings file other than settings.py in Django
Solution 1
I do know that no matter what you do with manage.py
, you're going to get that error because manage.py
does a relative import of settings
:
try:
import settings # Assumed to be in the same directory.
http://docs.djangoproject.com/en/dev/ref/django-admin/#django-admin-option---settings
Note that this option is unnecessary in manage.py, because it uses settings.py from the current project by default.
You should try django-admin.py syncdb --settings=mysettings
instead
Solution 2
Try creating a settings
module.
- Make a
settings
folder in the same directory asmanage.py
. - Put your different settings files in that folder (e.g.
base.py
andprod.py
). -
Make
__init__.py
and import whatever settings you want to use as your default. For example, your__init__.py
file might look like this:from base import *
-
Run your project and override the settings:
$ python2.6 manage.py syncdb --settings=settings.prod
Solution 3
this will help you:
create a another file "setting_prod.py" with your original settings.py file.
write down your setting which you need to run, in setting_prod.py file.
Then import setting_prod.py file in your settings.py file.
for ex. settings.py:
VARIABLE = 1
import setting_prod
setting_prod.py
VARIABLE = 2
After importing setting_prod.py file in settings.py file, VARIABLE will set to new value to "2" from "1".
Solution 4
this works for me:
DJANGO_SETTINGS_MODULE=config.settings.abc python manage.py migrate
Related videos on Youtube
Brian D
Updated on August 05, 2020Comments
-
Brian D over 3 years
I want to use a different settings file in django -- specifically settings_prod -- yet whenever I try to do a syncdb with
--settings=settings_prod
, it complains:python2.6 manage.py syncdb --settings=settings_prod Error: Can't find the file 'settings.py' in the directory containing 'manage.py'. It appears you've customized things. You'll have to run django-admin.py, passing it your settings module. (If the file settings.py does indeed exist, it's causing an ImportError somehow.)
I've also tried setting the environment variable
DJANGO_SETTINGS_MODULE=settings_prod
to no end.Edit: I have also set the environment variable in my wsgi file, also to no end:
import os import sys from django.core.handlers.wsgi import WSGIHandler os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings_prod' application = WSGIHandler()
Suggestions?
-
pajton about 13 yearsAnd with the WSGI is it working correctly? I had this problem before, but only with
manage.py
-
pajton about 13 yearsOk, someone just answered what I had in mind:).
import settings
is hardcoded inmanage.py
so no luck with this simple approach.
-
-
Brian D about 13 yearsI have tried that, but I get:
ImportError: Could not import settings 'settings_prod' (Is it on sys.path?): No module named settings_prod
-- but it should be, according to my WSGI file -
Brian D about 13 yearsWell, actually I just modified the WSGI file to include this:
sys.path.append("/home/username/webapps/django/project")
, but still no bueno. -
Wogan about 13 yearstry passing the --pythonpath argument to django-admin.py to ensure that your path is set up correctly.
-
Yuji 'Tomita' Tomita about 13 yearsRegardless of what your WSGI config file says, if you're running django-admin.py your settings file has to be on the pythonpath now, not when your WSGI handler is called by Apache. You could for example edit your manage.py file and do the appropriate
sys.path
modifications and change the hard codedimport settings
toimport mysettings as settings
-
holms over 10 yearswhy you have .py in the end? I've got error
ImportError: No module named py
and VARIABLE string won't be replaced as you want. If you'll haveimport setting_prod
it will be as setting_prod.VARIABLE -
IamnotBatman about 10 yearsIf you set
from setting_prod import *
You will get the behavior you are looking for but, it is less pythonic.