Flask-Bootstrap 如何工作?

nal*_*zok 6 python templates flask twitter-bootstrap flask-bootstrap

我正在学习 Flask Web 开发,我正在学习的教程介绍了一个名为Flask-Bootstrap的扩展。要使用这个扩展,你必须先初始化它,像这样:

from flask_bootstrap import Bootstrap
# ...
bootstrap = Bootstrap(app)
Run Code Online (Sandbox Code Playgroud)

对我来说很奇怪bootstrap,我的模块的其余部分没有使用该变量。但是,如果我注释掉这一行,jinja2.exceptions.TemplateNotFound则会引发异常。此外,使用的模板以这一行开头:

{% extends "bootstrap/base.html" %}
Run Code Online (Sandbox Code Playgroud)

但我没有指定目录/bootstrap/templates

我想知道发生了什么:

  1. 什么是bootstrap = Bootstrap(app)行吗?
  2. 住在哪里bootstrap/base.html

tin*_*are 5

    \n
  • 其他答案已经告诉你了
  • \n
\n
\n

bootstrap = Bootstrap(app) 行“初始化应用程序上的扩展”。

\n

bootstrap/base.html 位于 Flask-Bootstrap 包中。

\n
\n

要理解这一点,你必须了解“Flask 的模板搜索路径”

\n
    \n
  1. 应用程序的模板文件夹
  2. \n
  3. 蓝图的模板文件夹
  4. \n
\n

所以 Flask-Bootstrap 实际上将蓝图注册到您的应用程序\xef\xbc\x9a

\n
class Bootstrap(object):\n    def __init__(self, app=None):\n        if app is not None:\n            self.init_app(app)\n\n    def init_app(self, app):\n        blueprint = Blueprint(\n            \'bootstrap\',\n            __name__,\n            template_folder=\'templates\',\n            static_folder=\'static\',\n            static_url_path=app.static_url_path + \'/bootstrap\',\n            subdomain=app.config[\'BOOTSTRAP_LOCAL_SUBDOMAIN\'])\n\n        app.register_blueprint(blueprint)\n
Run Code Online (Sandbox Code Playgroud)\n

通过设置EXPLAIN_TEMPLATE_LOADING可以清楚地看到:

\n
app = Flask(__name__)\napp.config[\'EXPLAIN_TEMPLATE_LOADING\'] = True\n
Run Code Online (Sandbox Code Playgroud)\n

然后

\n
export FLASK_ENV=development\nflask run\n
Run Code Online (Sandbox Code Playgroud)\n

当您访问该页面时:

\n
[2018-07-12 15:28:58,659] INFO in debughelpers: Locating template "user.html":\n1: trying loader of application "hello"\n   class: jinja2.loaders.FileSystemLoader\n   encoding: \'utf-8\'\n   followlinks: False\n   searchpath:\n     - /root/learn/python-lab/Flask/flasky/templates\n   -> found (\'/root/learn/python-lab/Flask/flasky/templates/user.html\')\n2: trying loader of blueprint "bootstrap" (flask_bootstrap)\n   class: jinja2.loaders.FileSystemLoader\n   encoding: \'utf-8\'\n   followlinks: False\n   searchpath:\n     - /root/learn/python-lab/Flask/flasky/venv/lib/python3.6/site-packages/flask_bootstrap/templates\n   -> no match\n################################################################# Note here #######\n[2018-07-12 15:28:58,677] INFO in debughelpers: Locating template "bootstrap/base.html":\n1: trying loader of application "hello"\n   class: jinja2.loaders.FileSystemLoader\n   encoding: \'utf-8\'\n   followlinks: False\n   searchpath:\n     - /root/learn/python-lab/Flask/flasky/templates\n   -> no match  ### in app path not found\n2: trying loader of blueprint "bootstrap" (flask_bootstrap)\n   class: jinja2.loaders.FileSystemLoader\n   encoding: \'utf-8\'\n   followlinks: False\n   searchpath:\n     - /root/learn/python-lab/Flask/flasky/venv/lib/python3.6/site-packages/flask_bootstrap/templates\n   ## in blueprint path found the bootstrap/base.html\n   -> found (\'/root/learn/python-lab/Flask/flasky/venv/lib/python3.6/site-packages/flask_bootstrap/templates/bootstrap/base.html\')\n127.0.0.1 - - [12/Jul/2018 15:28:58] "GET /user/Yao HTTP/1.1" 200 -\n
Run Code Online (Sandbox Code Playgroud)\n\n