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: Диск - это подключенный сетевой диск некоторого сетевого ресурса, поэтому вам также необходимо проверить разрешения на совместное использование.

Другие вопросы по тегам