render_to_response дает TemplateDoesNotExist
Я получаю путь к шаблону, используя
paymenthtml = os.path.join(os.path.dirname(__file__), 'template\\payment.html')
и вызов его в другом приложении, где paymenthtml копируется в payment_template
return render_to_response(self.payment_template, self.context, RequestContext(self.request))
Но я получаю ошибку
TemplateDoesNotExist в / test-payment-url /
E: \ TestApp\ шаблон \payment.html
Почему появляется ошибка?
Изменить: я сделал следующее изменение в settings.py, и он может найти шаблон, но я не могу жестко указать путь в производстве, какая-либо подсказка?
TEMPLATE_DIRS = ("E:/testapp" )
4 ответа
Кажется, что Django будет загружать шаблоны, только если они находятся в каталоге, который вы определили в TEMPLATE_DIRS
, даже если они существуют в другом месте.
Попробуйте это в settings.py:
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
# Other settings...
TEMPLATE_DIRS = (
os.path.join(PROJECT_ROOT, "templates"),
)
а затем в представлении:
return render_to_response("payment.html", self.context, RequestContext(self.request))
# or
return render_to_response("subdir/payment.html", self.context, RequestContext(self.request))
Это сделало бы либо E:\path\to\project\templates\payment.html
или же E:\path\to\project\templates\subdir\payment.html
, Дело в том, что они находятся внутри каталога, который мы указали в settings.py.
Кстати: хитрая вещь в том, что Джанго бросает TemplateDoesNotExist
даже если представленный шаблон содержит шаблон, который не существует - {% include "some/template.html" %}
... это знание стоило мне времени и нервов.
У меня нет django здесь, но я думаю, что вы должны использовать / вместо \\?
Python помогает вам разобраться с косыми чертами в операционных системах
Вы уверены, что этот файл существует в вашей системе?
E:\testapp\template\payment.html
Это сообщение об ошибке довольно простое и появляется, когда Django пытается найти файл шаблона по пути в файловой системе и не может его увидеть.
Если файл существует, следующим шагом будет проверка разрешений для этого файла и каталогов, чтобы убедиться, что это не проблема с разрешениями. Если твой E:
Диск - это подключенный сетевой диск некоторого сетевого ресурса, поэтому вам также необходимо проверить разрешения на совместное использование.