Skip to content

alekzvik/Flask-LazyViews

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Flask-LazyViews

Registering url routes for your Flask app or blueprint in lazy way :)

Based on original snippet from Flask documentation!

Requirements

Installation

$ pip install Flask-LazyViews

License

Flask-LazyViews is licensed under the BSD License.

Usage

For application

project/app.py

from flask import Flask
from flask.ext.lazyviews import LazyViews


app = Flask(__name__)
views = LazyViews(app)

views.add('/', 'views.home')
views.add('/page/<int:page>', 'views.page')

project/views.py

from flask import render_template


def home():
    return render_template('home.html')


def page(page_id):
    page = get_page(page_id)
    return render_template('page.html', page=page)

For blueprint

project/app.py

...

from project.test import blueprint as test_blueprint

...

app.register_blueprint(test_blueprint, url_prefix='/test')

project/test/__init__.py

from flask import Blueprint
from flask.ext.lazyviews import LazyViews


blueprint = Blueprint('test', __name__)
views = LazyViews(blueprint, '.views')

views.add('/', 'test')
views.add('/advanced', 'advanced_test', methods=('GET', 'POST'))

project/test/views.py

from flask import render_template, request


def advanced_test():
    context = generate_context(request.form)
    return render_template('test/advanced.html', **context)


def test():
    return render_template('test/test.html')

Explanations

The main point of Flask-LazyViews is simplifying process of adding views to the app and blueprint using lazy technique from Flask documentation.

Also the next goal is simplifying viewname definition. For most cases our views functions placed in .views module of app or blueprint, so we don't need to input full path to that module.

This especially useful for blueprints. Let see the example above, if we using original snippet - we'll need to provide path to blueprint's views module:

add_url(blueprint, '/', 'test.views.test')

but with Flask-LazyViews we could to ignore test.

From other side if your view functions placed in some other location or you need to provide full path to its - you still could do this.

Also you could setup import_prefix like done in Django's patterns:

views = LazyViews(app, 'views')
views.add('/', 'home')
views.add('/page/<int:id>', 'page', methods=('GET', 'POST'))

Important

Be careful with import_prefix value if you used __name__ as Flask application name or blueprint import_name. Setting relative path could cause server errors.

Bugs, feature requests?

If you found some bug in Flask-LazyViews library, please, add new issue to the project's GitHub issues.

ChangeLog

0.1

  • Initial release.

About

Registering url routes for Flask app and blueprints in lazy way

Resources

License

Stars

Watchers

Forks

Packages

No packages published