私が見つけたいくつかのアドバイスに従って ここ ツイストで実行されるアプリケーションの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()
一部のフレームワークは、デーモンモードで実行されると、現在の作業ディレクトリからディレクトリを変更します。これは、ここに当てはまる可能性があります。
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)
次のように、デフォルトのtemplates
ディレクトリ( ここ と書かれている)をJinja2にフィードできます。
import jinja2
app = Flask(__name__)
app.jinja_loader = jinja2.FileSystemLoader('path/to/templates/directory')