对于某些静态页面使用flask / blueprint

时间:2011-08-14 00:08:46

标签: python flask

所以我对如何使用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专家。真的只需要一些麻烦:)

1 个答案:

答案 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的模板。