tipu
tipu

Reputation: 9614

setting up admin views with flask + admin module

In the following code, everything defaults over to the Member's index controller. How can I setup add_view to point to particular methods within Members? This way I can have a single Members button with functionality related to it in the dropdown.

views:

admin.add_view(Members(name="Add",endpoint="add",category="Members"))
admin.add_view(Members(name="Edit",endpoint="edit",category="Members"))
admin.add_view
(Members(name="Delete",endpoint="delete",category="Members"))

admin module:

from flask import render_template, abort
from jinja2 import TemplateNotFound
from flask.ext.admin import BaseView, expose, Admin

admin = Admin(name='Foo')

# Add administrative views here

class Members(BaseView):
    @expose('/')
    def index(self):
        return self.render('admin/index.html')

    @expose('/edit')
    def edit(self):
        return self.render('admin/edit.html')

    @expose('/delete')
    def delete(self):
        pass

Upvotes: 1

Views: 1780

Answers (1)

Joes
Joes

Reputation: 1818

Not sure how it'll help, as you're creating 3 instances of same class. While you can keep implementation highly coupled, it won't be as different as having 3 different classes.

Anyway, add_view will always point menu item to index method. However, self._default_view contains default view method name (index for your Members class).

Just to give an idea how it can look like:

class MyBase(BaseView):
  def __init__(self, def_view, **kwargs):
    self._default_view = def_view
    super(MyBase, self).__init__(**kwargs)

class Members(MyBase):
  @expose('/')
  def index(self):
    return self.render('...')

  #.. other view methods

admin.add_view(Members(def_view='index', name='Add', endpoint='add'))
admin.add_view(Members(def_view='edit', name='Edit', endpoint='edit'))
# ... 

Upvotes: 1

Related Questions