Skip to main content

FAB CoreUI Theme

https://img.shields.io/pypi/v/fab_coreui_theme.svg

CoreUI theme for FlaskAppbuilder

This theme is still very much a WIP. If you’d like to use it take a look at the fab_coreui_theme/templates/coreui/init.html and start overriding the blocks to make it your own.

Usage

This theme is meant to be with used with FlaskAppbuilder. Just grab the coreui_bp from fab_coreui_theme and you’re ready to use the views. Here is an example app.

QuickStart

from flask_appbuilder.models.sqla.interface import SQLAInterface
from fab_coreui_theme.fab_coreui_theme import CoreUIBaseView, CoreUIModelView, CoreUISimpleFormView, coreui_bp
# Make sure you import your app and register the blueprint!
from .www import app
app.register_blueprint(coreui_bp)

# Create a base view that inherits from CoreUIBaseView
class MyView(CoreUIBaseView):

        default_view = 'blank'
        @expose('/blank')

        @has_access
        def blank(self):
                return self.render_template(
                        'coreui/init.html'
                )

# Register the view with AppBuilder
appbuilder.add_view(MyView, "My View", category='My View')

Bootstrap the Flask App

Make sure the FlaskAppbuilder is used. If you used the fab cli to initialize the project it should be in there somewhere.

import logging

from flask import Flask
from flask_appbuilder import AppBuilder, SQLA
from flask_appbuilder.menu import Menu


logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
logging.getLogger().setLevel(logging.DEBUG)

app = Flask(__name__)
app.config.from_object("config")
db = SQLA(app)

appbuilder = AppBuilder(
        app,
        db.session,
        menu=Menu(reverse=False),
)

from . import views  # noqa

This registers the CoreUI Flask Blueprint. (This is only shown here for reference.)

# This is only shown for reference.
TEMPLATE_FOLDER = os.path.join(os.path.dirname(__file__), 'templates')
STATIC_FOLDER = os.path.join(os.path.dirname(__file__), 'static')
STATIC_URL_PATH = '/static/coreui'

# Use the Flask Blueprint to create an appized app and setup our routing
# https://flask.palletsprojects.com/en/2.0.x/blueprints/#templates

coreui_bp = Blueprint(
        'coreui_theme', __name__,
        template_folder=TEMPLATE_FOLDER,
        static_folder=STATIC_FOLDER,
        static_url_path=STATIC_URL_PATH
)

Then in your HTML templates you can bring in the static files relative to static -

{{url_for('coreui_theme.static',filename='coreui/node_modules/@coreui/coreui/dist/js/coreui.bundle.min.js')}}

Example Base View

from flask_appbuilder.models.sqla.interface import SQLAInterface
from fab_coreui_theme.fab_coreui_theme import CoreUIBaseView, CoreUIModelView, CoreUISimpleFormView, coreui_bp
# Make sure you import your app and register the blueprint!
from .www import app
app.register_blueprint(coreui_bp)

# Create a base view that inherits from CoreUIBaseView
class MyView(CoreUIBaseView):

        default_view = 'blank'
        @expose('/blank')

        @has_access
        def blank(self):
                return self.render_template(
                        'coreui/init.html'
                )

# Register the view with AppBuilder
appbuilder.add_view(MyView, "My View", category='My View')

Example Form View

from flask_appbuilder.fieldwidgets import BS3TextFieldWidget
from flask_appbuilder.forms import DynamicForm
from flask_babel import lazy_gettext
from wtforms import StringField
from wtforms.validators import DataRequired
from fab_coreui_theme.fab_coreui_theme import CoreUIBaseView, CoreUIModelView, CoreUISimpleFormView, coreui_bp
# Make sure you import your app and register the blueprint!
from .www import app
app.register_blueprint(coreui_bp)


# Declare the Form
class TestForm(DynamicForm):
    TestFieldOne = StringField(
                lazy_gettext("Test Field One"),
                validators=[DataRequired()],
                widget=BS3TextFieldWidget(),
    )
    TestFieldTwo = StringField(
                lazy_gettext("Test Field One"),
                validators=[DataRequired()],
                widget=BS3TextFieldWidget(),
    )


# Create the Form View and inherit from the CoreUISimpleFormView
class TestFormView(CoreUISimpleFormView):
    form = TestForm
    form_title = "This is my Test Form"
    default_view = "this_form_get"
    message = "My form submitted"

    def form_post(self, form):
                # process form
                flash(as_unicode(self.message), "info")

# Register the view
appbuilder.add_view(TestFormView, "My form View",
                                        icon="fa-group", label="My Test form")

Example Model View

from flask_appbuilder.models.sqla.interface import SQLAInterface
from fab_coreui_theme.fab_coreui_theme import CoreUIBaseView, CoreUIModelView, CoreUISimpleFormView, coreui_bp
# Make sure you import your app and register the blueprint!
from .www import app
app.register_blueprint(coreui_bp)


class ProductModelView(CoreUIModelView):
    datamodel = SQLAInterface(ProductModel)

appbuilder.add_view(ProductModelView, "Products",
                                        icon="fa-group", label="Products")

Extending

If you see something you don’t like you can customize it by overriding the blocks in the templates.

Customization - Flask AppBuilder - Server Side

See the Flask AppBuilder docs on Customization to customize the theme. You can fork this project, or create a new project that overrides blocks and templates.

In your app create a templates/mytheme/index.html file.

Override a block entirely -

{% extends "coreui/init.html" %}

{% block content %}
        <h1>My content!</h1>
{% endblock %}

Extend a block -

{% extends "coreui/init.html" %}

{% block content %}
        {{ super() }}
        <h1>My content!</h1>
{% endblock %}

See the fab_coreui_theme/templates/coreui/init.html for the menus, breadcrumbs, and sidebars.

Please note that menus are not implemented the way they are in FlaskAppbuilder and registering a view does not populate the menus.

Further Customization - CoreUI - Front End

Some relevant docs:

Install the javascript node_modules.

# Clone or fork the repo and clone it locally
cd fab_coreui_theme/coreui_theme/static
npm install

# or use the MakeFile - make npm-install

If this command gives you trouble try removing the package-lock.json and deleting the node_modules folder.

Then you can reference the js and css files as:

  <script src="{{url_for('coreui_theme.static',filename='coreui/node_modules/thing.js')}}"></script>
  <link
  href="{{url_for('coreui_theme.static',filename='coreui/node_modules/thing.css')}}"
  rel="stylesheet"
/>

Licenses

Features

  • CoreUI Theme - Flask Blueprint

  • CoreUI Theme - Flask AppBuilder BaseView

  • CoreUI Theme - Flask AppBuilder ModelView

  • CoreUI Theme - Flask AppBuilder SimpleFormView

Credits

This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template. It makes use of Flask AppBuilder and CoreUI.

History

0.1.0 (2021-08-28)

  • First release on PyPI.

Metadata

Release files for fab-coreui-theme 0.12.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fab-coreui-theme 0.12.0
File Size Uploaded
fab_coreui_theme-0.12.0.tar.gz 3.8 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for fab-coreui-theme 0.12.0
File Interpreter ABI Platform
fab_coreui_theme-0.12.0-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 7.9 MB

Release files / fab_coreui_theme-0.12.0.tar.gz

Download URL fab_coreui_theme-0.12.0.tar.gz
Size 3.8 MB
Tags Source
SHA-256 checksum
How to use checksums
8f9d831c9ca429e736765e14651015553b4a167285894e709239faa6776832c9
BLAKE2b-256 checksum
How to use checksums
809f119af16ec4eac4dc59bd8a3e606722e9363b959c68f9a2b57de5f1c1f8cb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

Release files / fab_coreui_theme-0.12.0-py2.py3-none-any.whl

Download URL fab_coreui_theme-0.12.0-py2.py3-none-any.whl
Size 4.2 MB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
d92814c3e46f0e4f13f4e0f745014660c67d6cbf15503d55928ff57ab0ab0952
BLAKE2b-256 checksum
How to use checksums
ac4d4d2ae8e20038153d6f0e9ef9b6b6f7e3cbde57d0983d6b46937c6375a702
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

Release history Release notifications | RSS feed

This release

0.12.0 This release

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page