Flask无法找到模板

Iam*_*ool 15 python flask

我的项目结构如下

run.py
lib/
mysite/
    conf/
        __init__.py (flask app)
        settings.py
    pages/
        templates/
            index.html
        views.py
        __init__.py
Run Code Online (Sandbox Code Playgroud)

这是 mysite.conf.__init__

from flask import Flask

app = Flask(__name__)
app.debug = True
Run Code Online (Sandbox Code Playgroud)

我的想法是现在导入app到每个其他模块以使用它来创建视图.在这种情况下,有一个模块pages.

pages.views我有一些代码

from flask import render_template
from mysite.conf import app

@app.route('/')
def index():
    return render_template('index.html')
Run Code Online (Sandbox Code Playgroud)

index.html被放置在pages/templates

当我运行这个应用程序时run.py,如下所示

from mysite.conf import app
app.run()
Run Code Online (Sandbox Code Playgroud)

我收到模板未找到错误.怎么解决?为什么会这样呢!

我基本上是一个django家伙,wsgi每次导入对象时都会面临很多不便,在每个模块中创建一个视图!它有点疯狂 - 这在某种程度上鼓励了循环进口.有什么方法可以避免这种情况吗?

Mar*_*ers 26

Flask希望该templates目录与创建它的模块位于同一文件夹中; 它正在寻找mysite/conf/templates,而不是 mysite/pages/templates.

你需要告诉Flask改为寻找其他地方:

app = Flask(__name__, template_folder='../pages/templates')
Run Code Online (Sandbox Code Playgroud)

这适用于相对于当前模块路径解析路径.

您不能拥有每个模块的模板目录,而不能使用蓝图.常见的模式是使用templates文件夹的子目录来分区模板.你会使用templates/pages/index.html,装载render_template('pages/index.html')

另一种方法是Blueprint每个子模块使用一个实例; 您可以为每个蓝图指定一个单独的模板文件夹,用于注册到该蓝图实例的所有视图.请注意,蓝图中的所有路径都必须以该蓝图唯一的公共前缀(可以为空)开头.