Commit b612215c authored by PJ Janse van Rensburg's avatar PJ Janse van Rensburg

Merge branch 'master' of git://github.com/nycynik/flask-admin into prs-to-merge

parents 30e014cc 81f96186
...@@ -518,8 +518,8 @@ class Admin(object): ...@@ -518,8 +518,8 @@ class Admin(object):
self.template_mode = template_mode or 'bootstrap2' self.template_mode = template_mode or 'bootstrap2'
self.category_icon_classes = category_icon_classes or dict() self.category_icon_classes = category_icon_classes or dict()
# Add predefined index view # Add index view
self.add_view(self.index_view) self._set_admin_index_view(index_view=index_view, endpoint=endpoint, url=url)
# Register with application # Register with application
if app is not None: if app is not None:
...@@ -541,6 +541,30 @@ class Admin(object): ...@@ -541,6 +541,30 @@ class Admin(object):
self._add_view_to_menu(view) self._add_view_to_menu(view)
def _set_admin_index_view(self, index_view=None,
endpoint=None, url=None):
"""
Add the admin index view.
:param index_view:
Home page view to use. Defaults to `AdminIndexView`.
:param url:
Base URL
:param endpoint:
Base endpoint name for index view. If you use multiple instances of the `Admin` class with
a single Flask application, you have to set a unique endpoint name for each instance.
"""
self.index_view = index_view or AdminIndexView(endpoint=endpoint, url=url)
self.endpoint = endpoint or self.index_view.endpoint
self.url = url or self.index_view.url
# Add predefined index view
# assume index view is always the first element of views.
if len(self._views) > 0:
self._views[0] = self.index_view
else:
self.add_view(self.index_view)
def add_views(self, *args): def add_views(self, *args):
""" """
Add one or more views to the collection. Add one or more views to the collection.
...@@ -627,7 +651,8 @@ class Admin(object): ...@@ -627,7 +651,8 @@ class Admin(object):
def get_category_menu_item(self, name): def get_category_menu_item(self, name):
return self._menu_categories.get(name) return self._menu_categories.get(name)
def init_app(self, app): def init_app(self, app, index_view=None,
endpoint=None, url=None):
""" """
Register all views with the Flask application. Register all views with the Flask application.
...@@ -638,10 +663,14 @@ class Admin(object): ...@@ -638,10 +663,14 @@ class Admin(object):
self._init_extension() self._init_extension()
# Register Index view
self._set_admin_index_view(index_view=index_view, endpoint=endpoint, url=url)
# Register views # Register views
for view in self._views: for view in self._views:
app.register_blueprint(view.create_blueprint(self)) app.register_blueprint(view.create_blueprint(self))
def _init_extension(self): def _init_extension(self):
if not hasattr(self.app, 'extensions'): if not hasattr(self.app, 'extensions'):
self.app.extensions = dict() self.app.extensions = dict()
...@@ -670,4 +699,4 @@ class Admin(object): ...@@ -670,4 +699,4 @@ class Admin(object):
""" """
Return menu links. Return menu links.
""" """
return self._menu_links return self._menu_links
\ No newline at end of file
...@@ -116,6 +116,25 @@ def test_custom_index_view(): ...@@ -116,6 +116,25 @@ def test_custom_index_view():
eq_(admin._views[0], view) eq_(admin._views[0], view)
def test_custom_index_view_in_init_app():
view = base.AdminIndexView(name='a', category='b', endpoint='c',
url='/d', template='e')
app = Flask(__name__)
admin = base.Admin()
admin.init_app(app, index_view=view)
eq_(admin.endpoint, 'c')
eq_(admin.url, '/d')
ok_(admin.index_view is view)
eq_(view.name, 'a')
eq_(view.category, 'b')
eq_(view._template, 'e')
# Check if view was added
eq_(len(admin._views), 1)
eq_(admin._views[0], view)
def test_base_registration(): def test_base_registration():
app = Flask(__name__) app = Flask(__name__)
admin = base.Admin(app) admin = base.Admin(app)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment