Christopher H
Christopher H

Reputation: 2194

Django can't find template

I know many people have asked, this question, but despite hardcoding the path to my template directory I can't seem to get Django to find my template.

Here is settings.py

TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
#django.template.loaders.eggs.Loader',
)

TEMPLATE_DIRS = (
    "/Users/full/path/to/marketing_site/templates",
)

This is the views.py file:

def static (request, feature_page):

# this will get the appropriate feature page template.
template = loader.get_template('features/pricing.html')
c = RequestContext(request,{
})
return HttpResponse(template.render(c))

Inside the main folder is the templates folder and the app folder. I use to put the apps in the same folder as settings.py but it appears django 1.4 has changed the default file structure.

My error is:

TemplateDoesNotExist at /features/pricing 

Django tried loading these templates, in this order:
Using loader django.template.loaders.filesystem.Loader:
Using loader django.template.loaders.app_directories.Loader:
/Library/Python/2.7/site-packages/django/contrib/auth/templates/feature_pricing.html (File does not exist)

Update:
My logs for the webpage list the TEMPLATE_DIRS as ().

If I put a print statement on the settings.py page for the TEMPLATE_DIRS I get a printout of the TEMPLATE_DIRS appropriately... so somehow the TEMPLATE_DIRS isn't being used (from what it looks like)

Upvotes: 6

Views: 16115

Answers (4)

Christopher H
Christopher H

Reputation: 2194

I had added in an extra TEMPLATE_DIR in the settings.py

:(

Upvotes: 10

Priyeshj
Priyeshj

Reputation: 1345

Try adding project paths to django.wsgi

import os
import sys

paths = ('path/to/project/',
        'path/to/more /included/directories/',
    )

for path in paths:
    if path not in sys.path:
       sys.path.append(path)

os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Upvotes: 1

Frantz Romain
Frantz Romain

Reputation: 846

it's better to set up relative paths for your path variables. You can set it up like so:

import os

PATH_PROJECT = os.path.realpath(os.path.dirname(__file__))

...

...

TEMPLATE_DIRS = (
    PATH_PROJECT + '/templates/'
)

Also assuming you are using windows you may want to try:

TEMPLATE_DIRS = (
"C:/Users/full/path/to/marketing_site/templates",
)

Upvotes: 5

Colin Dunklau
Colin Dunklau

Reputation: 3111

I'm betting /Users/full/path/to/marketing_site/templates does not contain a features directory, or /Users/full/path/to/marketing_site/templates/features does not contain a pricing.html file.

Based on your comment, it looks like you're calling loader.get_template('feature_pricing.‌​html'), instead of using 'feature/pricing.html'.

EDIT: I didn't notice this before:

Inside the main folder is the templates folder and the app folder. I use to put the apps in the same folder as settings.py but it appears django 1.4 has changed the default file structure.

That could be causing the issue. Change the directory structure to match the 1.4 Django conventions. You might just recreate the project, copy the relevant settings over into the newly create settings.py, and copy all the files.

Upvotes: 1

Related Questions