Flask не находит каталог шаблонов при работе с витой - PullRequest
19 голосов
/ 12 декабря 2011

Следуя некоторому совету, который я нашел здесь Я пытаюсь использовать Flask в качестве веб-интерфейса для приложения, работающего с витой.

Как предложено в документации Flask, я создал каталог "templates", который находится на том же уровне, что и мой скрипт, но при запуске сервера я получаю следующую ошибку:

Внутренняя ошибка сервера

Сервер обнаружил внутреннюю ошибку и не смог выполнить ваш запрос. Либо сервер перегружен, либо в приложении произошла ошибка.

Когда я не пытаюсь загрузить шаблон и просто пишу строку в запросе, она работает нормально. Это то, что заставляет меня думать, что это связано с загрузкой шаблона.

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

Ответы [ 2 ]

41 голосов
/ 21 декабря 2011

Некоторые фреймворки будут менять каталог из вашего текущего рабочего каталога, когда они работают в режиме демона, и это вполне может иметь место в данном случае.

Flask, начиная с версии 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)
5 голосов
/ 27 мая 2014

Вы можете кормить Jinja2 каталогом templates по умолчанию (как написано здесь ) следующим образом:

import jinja2

app = Flask(__name__)
app.jinja_loader = jinja2.FileSystemLoader('path/to/templates/directory')
...