So ive been trying to setup a django settings module that will check the environment variable and load settings.
Heres what my settings module looks like
/templates
home.html
/settings
base.py
prod.py
dev.py
test.py
base.py
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
TEMPLATE_DIRS = [
os.path.join(PROJECT_ROOT, "templates"),
]
urls.py
from django.views.generic.simple import direct_to_template
urlpatterns = patterns('',
url(r"^$", direct_to_template, {'template' : 'home.html' }, name="home"),
)
When I had all of my settings in one file, this worked just fine, but since I split the files up I get the error:
TemplateDoesNotExist at /
home.html
Template-loader postmortem
Django tried loading these templates, in this order:
Using loader django.template.loaders.filesystem.Loader:
/Users/Tulsa/Apps/tulsa-applications-co/tulsa/tulsa/settings/templates/home.html (File does not exist)
Using loader django.template.loaders.app_directories.Loader:
/Users/Tulsa/.Apps/tulsa_io/lib/python2.7/site-packages/django/contrib/auth/templates/home.html (File does not exist)
/Users/Tulsa/.Apps/tulsa_io/lib/python2.7/site-packages/django/contrib/admindocs/templates/home.html (File does not exist)
/Users/Tulsa/.Apps/tulsa_io/lib/python2.7/site-packages/grappelli/templates/home.html (File does not exist)
/Users/Tulsa/.Apps/tulsa_io/lib/python2.7/site-packages/django/contrib/admin/templates/home.html (File does not exist)
/Users/Tulsa/.Apps/tulsa_io/lib/python2.7/site-packages/pagination/templates/home.html (File does not exist)
/Users/Tulsa/.Apps/tulsa_io/lib/python2.7/site-packages/djangosaml2/templates/home.html (File does not exist)
/Users/Tulsa/Apps/tulsa-applications-co/tulsa/tulsa/apps/profiles/templates/home.html (File does not exist)
/Users/Tulsa/.Apps/tulsa_io/lib/python2.7/site-packages/debug_toolbar/templates/home.html (File does not exist)
Using loader django.template.loaders.eggs.Loader:
what am i missing here?
can you test as below?
i think your code would set PROJECT_ROOT as '/some/path/to/settings'
All answers above require of configuring TEMPLATE_DIRS or TEMPLATE_LOADERS, which is not necessary and correct. You just have to put YOUR application to the INSTALLED_APPS.
For example, if your application is in the MyMegaApp (where settigs.py resides), in other words you have a project structure like below
Then you have to add your app like this
After that your index.html template will be found in MyMegaApp/templates folder
Include this in settings
Add this to urls.py
call url by
Change your
PROJECT_ROOT
to:And make sure your
TEMPLATE_LOADERS
variable is set properly.Explanation:
abspath
gives you the full path of thebase.py
, i.e.,/home/some-path/project-folder/settings/base.py
Therefore, first
dirname
gives you the dir path name of the given path (obtained above), i.e.,/home/some-path/project-folder/settings/
And then, the second
dirname
gives you the dir path name of the given path (obtained above), i.e.,/home/some-path/project-folder/
So, now when you join this path to
templates
, everything starts working fine.For more refer python docs.
The problem here is, in your settings, your
PROJECT_ROOT
evaluates to the directory which runsmanage.py
.You may do this for
TEMPLATE_DIRS
settingsNow, append
../../
relative to thePROJECT_ROOT
. Something like this: