所以我对如何使用flask构建页面感到有点困惑,而不必说明每个视图。
如何在我要加载的页面上制作可以拾取的蓝色打印件?
说这些是我的示例页面
templates/
layout.html
section1/
subsection/index.html
subsection2/index.html
section2
subsection/index.html
childofsubsection/index.html
我想假设我去了example.com/section1/subsection/它会知道寻找相应的页面而不必特别说明它。文档http://flask.pocoo.org/docs/blueprints/非常接近解释这一点,但我仍然有点迷失。
from flask import Flask
from yourapplication.simple_page import simple_page
app = Flask(__name__)
app.register_blueprint(simple_page)
另外,不确定这应该去哪里?看起来它会在application.py中出现,但要求从“yourapplication”导入
非常新的烧瓶而不是python专家。真的只需要一些麻烦:)
答案 0 :(得分:12)
如果您想查看Blueprint
用法示例,可以查看this answer。
关于问题的“模板自动查找”部分:与文档说明一样,蓝图允许指定要查找静态文件和/或模板的文件夹,这样您就不必指定完整render_template()
调用中模板文件的路径,但只包含文件名。
如果你希望你的观点“神奇地”知道他们应该选择哪个文件,你必须做一些黑客攻击。例如,一个解决方案可能是在视图上应用装饰器,使其根据函数名称选择模板文件,这样的装饰器将如下所示:
from functools import wraps
from flask import render_template
def autorender(func):
@wraps(func)
def wrapper(*args, **kwargs):
context = func(*args, **kwargs)
return render_template('%s.html' % func.func_name, **context)
return wrapper
然后你只需要将视图中的上下文作为dict返回(如果没有上下文,则返回空字典):
@my_blueprint.route('/')
@autorender
def index():
return {'name': 'John'} # or whatever your context is
它会自动选择名为index.html
的模板。