render_to_response gives TemplateDoesNotExist

笑着哭i 提交于 2020-01-01 09:24:07

问题


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/

E:\testapp\template\payment.html

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" )

回答1:


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...
TEMPLATE_DIRS = (
    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.




回答2:


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.




回答3:


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

python helps you about the slashes across OSes




回答4:


Are you certain that this file exists on your system?

E:\testapp\template\payment.html

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.



来源:https://stackoverflow.com/questions/1957089/render-to-response-gives-templatedoesnotexist

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!