Take the 2-minute tour ×

I am obtaining the path of template using

paymenthtml = os.path.join(os.path.dirname(__file__), 'template\\payment.html')

and calling it in another application where paymenthtml gets copied to payment_template

return render_to_response(self.payment_template, self.context, RequestContext(self.request))

But I get error

TemplateDoesNotExist at /test-payment-url/


Why is the error coming?

Edit : I have made following change in settings.py and it is able to find the template, but i cannot hardcode the path in production, any clue?

TEMPLATE_DIRS = ("E:/testapp" )
share|improve this question
add comment

4 Answers

up vote 18 down vote accepted

It seems like Django will only load templates if they're in a directory you define in TEMPLATE_DIRS, even if they exist elsewhere.

Try this in settings.py:

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
# Other settings...
    os.path.join(PROJECT_ROOT, "templates"),

and then in the view:

return render_to_response("payment.html", self.context, RequestContext(self.request))
# or
return render_to_response("subdir/payment.html", self.context, RequestContext(self.request))

This would render either E:\path\to\project\templates\payment.html or E:\path\to\project\templates\subdir\payment.html. The point is that they're inside of the directory we specified in settings.py.

share|improve this answer
aha,no hardcode, i will try this out , thx so much –  dhaval Dec 24 '09 at 11:31
This is a solid approach, but I wanted to add a little info about how Django loads templates. It will look in directories listed in the TEMPLATE_DIRS variable, in the order in which they are listed. The first match it finds will be used. After that, Django will look in the various app modules under app.templates and load from there. The 'cascade' style loading is very handy for selectively replacing templates from reusable apps, etc. –  shawnr Dec 24 '09 at 17:35
add comment

By the way: A tricky thing is, that django throws TemplateDoesNotExist even if the rendered template includes a template that doesn't exist - {% include "some/template.html" %}... this knowledge has cost me some time and nerves.

share|improve this answer
add comment

i do not have a django here, but i think you should use / instead of \\ ?

python helps you about the slashes across OSes

share|improve this answer
I have tried both and only then posted here, does not work, thx for help though –  dhaval Dec 24 '09 at 6:57
add comment

Are you certain that this file exists on your system?


This error message is pretty straightforward and is seen when Django tries to find your template file by path on the file system and cannot see it.

If the file does exist the next step would be to check the permissions on that file and the directories to ensure that this is not a permissions issue. If your E: drive is a mapped network drive of some network share then you also need to check sharing permissions as well.

share|improve this answer
yes the file opens directly in browser and no its not permission issues , its obvious but not working and therefore had to post for help –  dhaval Dec 24 '09 at 6:57
add comment

Your Answer


