web-dev-qa-db-ja.com

Flaskツイストで実行すると、テンプレートディレクトリが見つかりません

私が見つけたいくつかのアドバイスに従って ここ ツイストで実行されるアプリケーションのWebインターフェイスとしてFlaskを使用しようとしています。

Flaskドキュメントで提案されているように、スクリプトと同じレベルの「テンプレート」ディレクトリを作成しましたが、サーバーを起動すると、次のエラーが発生します。

内部サーバーエラー

サーバーで内部エラーが発生し、リクエストを完了できませんでした。サーバーが過負荷になっているか、アプリケーションにエラーがあります。

テンプレートを読み込もうとせず、リクエストに文字列を書き込むだけで問題なく動作します。これが、テンプレートのロードに関連していると私に思わせる理由です。

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

一部のフレームワークは、デーモンモードで実行されると、現在の作業ディレクトリからディレクトリを変更します。これは、ここに当てはまる可能性があります。

Flaskは、0.7以降、Flaskを呼び出すときにtemplate_folderキーワード引数を渡すことをサポートしているため、次のことを試すことができます。

import os
tmpl_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'templates')
# ...
app = Flask('myapp', template_folder=tmpl_dir)
41
dskinner

次のように、デフォルトのtemplatesディレクトリ( ここ と書かれている)をJinja2にフィードできます。

import jinja2

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