Flask не находит каталог шаблонов при работе с скрученными
Следуя советам, которые я нашел здесь, я пытаюсь использовать Flask в качестве веб-интерфейса для приложения, которое работает со скрученными.
Как было предложено в документации Flask, я создал каталог "шаблонов", который находится на том же уровне, что и мой script, но когда я запускаю сервер, я получаю следующую ошибку:
Внутренняя ошибка сервера
Сервер обнаружил внутреннюю ошибку и не смог выполнить ваш запрос. Либо сервер перегружен, либо есть ошибка в приложении.
Когда я не пытаюсь загрузить шаблон и просто написать строку в запросе, он отлично работает. Именно это заставляет меня думать, что это связано с загрузкой шаблона.
from twisted.internet import reactor
from twisted.web.resource import Resource
from twisted.web.wsgi import WSGIResource
from twisted.internet.threads import deferToThread
from twisted.web.server import Site, NOT_DONE_YET
from flask import Flask, request, session, redirect, url_for, abort, \
render_template, flash
app= Flask(__name__)
app.config.from_object(__name__)
@app.route('/login', methods= ['GET', 'POST'])
def login():
return render_template('login.html', error= error)
if __name__ == '__main__':
root = WSGIResource(reactor, reactor.getThreadPool(), app)
factory = Site(root)
reactor.listenTCP(8880, factory)
reactor.run()
Ответы
Ответ 1
Некоторые фреймворки изменят каталог из вашего текущего рабочего каталога, когда они будут запущены в режиме демона, и это может быть очень хорошо.
Флажок, начиная с 0.7, поддерживал передачу аргумента ключевого слова template_folder при вызове Flask, поэтому вы можете попробовать:
import os
tmpl_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'templates')
# ...
app = Flask('myapp', template_folder=tmpl_dir)
Ответ 2
Вы можете передать Jinja2 по умолчанию templates
(как написано здесь) следующим образом:
import jinja2
app = Flask(__name__)
app.jinja_loader = jinja2.FileSystemLoader('path/to/templates/directory')