Basic usage¶
To get started, the first step is to import and load the extension:
from flask import Flask
from flask_bootstrap import Bootstrap
def create_app():
app = Flask(__name__)
Bootstrap(app)
return app
# do something with app...
After loading, new templates are available to derive from in your templates.
Sample Application¶
If you want to have a look at a small sample application, try browsing it on github.
Templates¶
Creating a new Bootstrap-based template is simple:
{% extends "bootstrap/base.html" %}
{% block title %}This is an example page{% endblock %}
{% block navbar %}
<div class="navbar navbar-fixed-top">
<!-- ... -->
</div>
{% endblock %}
{% block content %}
<h1>Hello, Bootstrap</h1>
{% endblock %}
Everything you do in child templates is based on blocks. Some blocks (like
title
, navbar
or content
) are “convenience blocks”. Strictly
speaking they would not be necessary, but are added to save typing effort.
A very powerful feature is Jinja2’s super() function. This gives you the option of amending blocks instead of replacing them.
Available blocks¶
Block name | Outer Block | Purpose |
---|---|---|
doc | Outermost block. | |
html | doc | Contains the complete content of the <html> tag. |
html_attribs | doc | Attributes for the HTML tag. |
head | doc | Contains the complete content of the <head> tag. |
body | doc | Contains the complete content of the <body> tag. |
body_attribs | body | Attributes for the Body Tag. |
title | head | Contains the complete content of the <title> tag. |
styles | head | Contains all CSS style <link> tags inside head. |
metas | head | Contains all <meta> tags inside head. |
navbar | body | An empty block directly above content. |
content | body | Convenience block inside the body. Put stuff here. |
scripts | body | Contains all <script> tags at the end of the body. |
Examples¶
Adding a custom CSS file:
{% block styles %} {{super()}} <link rel="stylesheet" href="{{url_for('.static', filename='mystyle.css')}}"> {% endblock %}
Custom Javascript loaded before Bootstrap’s javascript code:
{% block scripts %} <script src="{{url_for('.static', filename='myscripts.js')}}"></script> {{super()}} {% endblock %}
Adding a
lang="en"
attribute to the<html>
-tag:{% block html_attribs %} lang="en"{% endblock %}
Static resources¶
The url-endpoint bootstrap.static
is available for refering to Bootstrap
resources, but usually, this isn’t needed. A bit better is using the
bootstrap_find_resource
template filter, which will take CDN settings into
account.
The current resource-system is described in detail on CDN support.