微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当我尝试加载 Flask Web 应用程序的管理主页时出现递归错误

如何解决当我尝试加载 Flask Web 应用程序的管理主页时出现递归错误

我遇到的问题是,当我尝试加载管理页面时,它应该会加载,但出现错误。该错误指向在 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 举报,一经查实,本站将立刻删除。