Ошибка MyIndexView в примере темы не работает в Flask-AppBuilder
Я реализовал шаги 1, 2 и 3 из раздела "Изменение индекса" этой страницы https://flask-appbuilder.readthedocs.io/en/latest/customizing.html?highlight=theme.
Я получаю следующую ошибку: \app__init__. Py", строка 4, из app.index import MyIndexView ImportError: невозможно импортировать имя 'MyIndexView'
Я внес эти изменения в базовое приложение Flask-AppBuilder.
Код в точности такой, как показано на сайте.
Я ожидаю, что пример будет работать, как описано. Но я получаю сообщение, которое я разместил выше, когда запускаю его.
1 ответ
Ваш index.py должен выглядеть следующим образом (базовая версия).
# Import flask functions for redirecting and getting user status
from flask import g, url_for, redirect
# Import IndexView class to overwrite files/redirects and expose to expose custom index view
from flask_appbuilder import IndexView, expose
# File to display custom made different views based off if user is signed
class MyIndexView(IndexView):
# Checking user and redirecting for user when user goes to index view
@expose('/')
def index(self):
# Get user status
user = g.user
# Check user
if user.is_anonymous:
# user is not authenticated and gets redirected to New user page
return redirect(url_for('HomeView.new'))
else:
# user is authenticated and has an account redirect to General page
return redirect(url_for('HomeView.general'))
Затем в вашем views.py создайте похожий вид
# Views for any home paths
class HomeView(BaseView):
# add route base for views as /home
route_base = "/home"
# Route for new or logged out users
@expose('/new')
def new(self):
return self.render_template('new_user.py')
# Route for signed in users or users who want to just view data
@expose('/general')
def general(self):
return self.render_template('my_index.py')
Кроме того, убедитесь, что добавили его в ваш объект appbuilder в вашем init.py
appbuilder = AppBuilder(app, db.session, indexview=MyIndexView)