【问题标题】:Flask doesn't locate template directory when running with twisted使用扭曲运行时,Flask 找不到模板目录
【发布时间】:2012-01-18 16:31:08
【问题描述】:

根据我找到的here 的一些建议,我正在尝试将 Flask 用作运行 twisted 的应用程序的 Web 界面。

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

【问题讨论】:

  • 我忘了说我是在windows下用python 2.7运行脚本
  • 你在twistied时验证过当前工作目录是什么吗?听起来可能不是您所期望的。
  • 您好,我确实需要检查当前目录,但是您知道它存储在哪个变量中吗?
  • os.getcwd() 将其作为字符串提供给您。

标签: python templates twisted flask


【解决方案1】:

某些框架在守护进程模式下运行时会从您当前的工作目录更改目录,这很可能就是这种情况。

Flask 从 0.7 开始支持在调用 Flask 时传递 template_folder 关键字参数,你可以试试:

import os
tmpl_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'templates')

以下是一个较短的版本,可以正常工作:

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

【讨论】:

    【解决方案2】:

    您可以像这样使用默认的templates 目录(写成here)来提供 Jinja2:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-13
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      • 2015-06-25
      • 2019-05-24
      • 1970-01-01
      相关资源
      最近更新 更多