问题描述
我遇到的问题是,当我尝试加载管理页面时,它应该会加载,但出现错误。该错误指向在 flask-admin base.html 模板中标记的问题。
Traceback (most recent call last):
File "c:\users\user\documents\python\microblog\venv\lib\site-packages\flask\app.py",line 2446,in
wsgi_app
response = self.full_dispatch_request()
File "c:\users\user\documents\python\microblog\venv\lib\site-packages\flask\app.py",line 1951,in
full_dispatch_request
rv = self.handle_user_exception(e)
File "c:\users\user\documents\python\microblog\venv\lib\site-packages\flask\app.py",line 1820,in
handle_user_exception
reraise(exc_type,exc_value,tb)
File "c:\users\user\documents\python\microblog\venv\lib\site-packages\flask\_compat.py",line 39,in
reraise
raise value
File "c:\users\user\documents\python\microblog\venv\lib\site-packages\flask\app.py",line 1949,in
full_dispatch_request
rv = self.dispatch_request()
File "c:\users\user\documents\python\microblog\venv\lib\site-packages\flask\app.py",line 1935,in
dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "c:\users\user\documents\python\microblog\venv\lib\site-packages\flask_admin\base.py",line 69,in inner
return self._run_view(f,*args,**kwargs)
File "c:\users\user\documents\python\microblog\venv\lib\site-packages\flask_admin\base.py",line 368,in _run_view
return fn(self,line 452,in index
return self.render(self._template)
File "c:\users\user\documents\python\microblog\venv\lib\site-packages\flask_admin\base.py",line 308,in render
return render_template(template,**kwargs)
File "c:\users\user\documents\python\microblog\venv\lib\site-packages\flask\templating.py",line 140,in render_template
ctx.app,File "c:\users\user\documents\python\microblog\venv\lib\site-packages\flask\templating.py",line 120,in _render
rv = template.render(context)
File "c:\users\user\documents\python\microblog\venv\lib\site-packages\jinja2\environment.py",line
1090,in render
self.environment.handle_exception()
File "c:\users\user\documents\python\microblog\venv\lib\site-packages\jinja2\environment.py",line
832,in handle_exception
reraise(*rewrite_traceback_stack(source=source))
File "c:\users\user\documents\python\microblog\venv\lib\site-packages\jinja2\_compat.py",line 28,in
reraise
raise value.with_traceback(tb)
File "c:\users\user\documents\python\microblog\venv\lib\site-
packages\flask_admin\templates\bootstrap3\admin\index.html",line 1,in top-level template code
{% extends 'admin/master.html' %}
File "c:\users\user\documents\python\microblog\venv\lib\site-
packages\flask_admin\templates\bootstrap3\admin\master.html",in top-level template code
{% extends admin_base_template %}
File "c:\users\user\documents\python\microblog\venv\lib\site-
packages\flask_admin\templates\bootstrap3\admin\base.html",line 6,in top-level template code
<title>{% block title %}{% if admin_view.category %}{{ admin_view.category }} - {% endif %}{{
admin_view.name }} - {{ admin_view.admin.name }}{% endblock %}</title>
File "c:\users\user\documents\python\microblog\venv\lib\site-
packages\flask_admin\templates\bootstrap3\admin\base.html",in block "title"
<title>{% block title %}{% if admin_view.category %}{{ admin_view.category }} - {% endif %}{{
admin_view.name }} - {{ admin_view.admin.name }}{% endblock %}</title>
File "c:\users\user\documents\python\microblog\venv\lib\site-packages\speaklater.py",line 133,in
__str__
return str(self.value)
File "c:\users\user\documents\python\microblog\venv\lib\site-packages\speaklater.py",line 177,in
__getattr__
return getattr(self.value,name)
File "c:\users\user\documents\python\microblog\venv\lib\site-packages\speaklater.py",name)
[PrevIoUs line repeated 471 more times]
File "c:\users\user\documents\python\microblog\venv\lib\site-packages\speaklater.py",line 115,in
<lambda>
value = property(lambda x: x._func(*x._args,**x._kwargs))
File "c:\users\user\documents\python\microblog\venv\lib\site-packages\flask_babelex\__init__.py",line 533,in gettext
t = self.get_translations()
File "c:\users\user\documents\python\microblog\venv\lib\site-packages\flask_babelex\__init__.py",line 510,in get_translations
locale = get_locale()
File "c:\users\user\documents\python\microblog\venv\lib\site-packages\flask_babelex\__init__.py",line 220,in get_locale
rv = babel.locale_selector_func()
File "C:\Users\USER\Documents\python\microblog\app\__init__.py",line 95,in get_locale
return request.accept_languages.best_match(current_app.config['LANGUAGES'])
File "c:\users\user\documents\python\microblog\venv\lib\site-packages\werkzeug\local.py",line 347,in __getattr__
return getattr(self._get_current_object(),name)
File "c:\users\user\documents\python\microblog\venv\lib\site-packages\werkzeug\local.py",line 306,in _get_current_object
return self.__local()
File "c:\users\user\documents\python\microblog\venv\lib\site-packages\flask\globals.py",line 36,in
_lookup_req_object
top = _request_ctx_stack.top
File "c:\users\user\documents\python\microblog\venv\lib\site-packages\werkzeug\local.py",line 168,in top
return self._local.stack[-1]
File "c:\users\user\documents\python\microblog\venv\lib\site-packages\werkzeug\local.py",line 72,in
__getattr__
return self.__storage__[self.__ident_func__()][name]
RecursionError: maximum recursion depth exceeded while calling a Python object
一开始没有问题,但是当我将应用程序从全局上下文更改为使用应用程序工厂和蓝图结构时,问题开始了。
app/init.py
from flask import Flask,request,current_app
from config import Config
from flask_sqlalchemy import sqlAlchemy
from flask_migrate import Migrate
from flask_login import LoginManager
import logging
from logging.handlers import SMTPHandler,RotatingFileHandler
from flask_mail import Mail
from flask_bootstrap import Bootstrap
from flask_admin import Admin
from flask_moment import Moment
from flask_babel import Babel,lazy_gettext as _l
from elasticsearch import Elasticsearch
import os
babel = Babel()
moment = Moment()
bootstrap = Bootstrap()
mail = Mail()
db = sqlAlchemy()
migrate = Migrate()
login = LoginManager()
login.login_view = 'auth.login'
login.login_message = _l('Please log in to view this page.')
admin = Admin(name="microblog",template_mode="bootstrap3")
def create_app(config_file=Config):
app = Flask(__name__)
app.config.from_object(Config)
babel.init_app(app)
moment.init_app(app)
login.init_app(app)
bootstrap.init_app(app)
db.init_app(app)
migrate.init_app(app,db)
mail.init_app(app)
admin.init_app(app)
from app.errors import bp as errors_bp
app.register_blueprint(errors_bp)
from app.auth import bp as auth_bp
app.register_blueprint(auth_bp,url_prefix='/auth')
from app.main import bp as main_bp
app.register_blueprint(main_bp)
from app.admin.routes import admin_bp
app.register_blueprint(admin_bp)
if not app.debug and not app.testing:
if app.config['MAIL_SERVER']:
auth = None
if app.config['MAIL_USERNAME'] or app['MAIL_PASSWORD']:
auth = (app.config['MAIL_USERNAME'],app.config['MAIL_PASSWORD'])
secure = None
if app.config['MAIL_USE_TLS']:
secure = ()
mail_handler = SMTPHandler(
mailhost=(app.config['MAIL_SERVER'],app.config['MAIL_PORT']),fromaddr='no-reply@' + app.config['MAIL_SERVER'],toaddrs=app.config['ADMINS'],subject='Microblog Failure',credentials=auth,secure=secure
)
mail_handler.setLevel(logging.ERROR)
app.logger.addHandler(mail_handler)
if not os.path.exists('logs'):
os.mkdir('logs')
file_handler = RotatingFileHandler('logs/microblog.log',maxBytes=10240,backupCount=10)
file_handler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]'))
file_handler.setLevel(logging.INFO)
app.logger.addHandler(file_handler)
app.logger.setLevel(logging.INFO)
app.logger.info('Microblog startup')
app.elasticsearch = Elasticsearch([app.config['ELASTICSEARCH_URL']]) \
if app.config['ELASTICSEARCH_URL'] else None
return app
@babel.localeselector
def get_locale():
return request.accept_languages.best_match(current_app.config['LANGUAGES'])
from app import models
app/admin/init.py
from flask import Blueprint
admin_bp = Blueprint('admin_bp',__name__)
from app.admin import routes
app/admin/routes.py
from app import admin,db
from flask_admin.contrib.sqla import ModelView
from app.models import Post,User
admin.add_view(ModelView(User,db.session))
admin.add_view(ModelView(Post,db.session))
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)