我的项目结构如下
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每个子模块使用一个实例; 您可以为每个蓝图指定一个单独的模板文件夹,用于注册到该蓝图实例的所有视图.请注意,蓝图中的所有路径都必须以该蓝图唯一的公共前缀(可以为空)开头.