![](/img/trans.png)
[英]Flask python - werkzeug.routing.BuildError: Could not build url for endpoint
[英]Flask-Admin and Blueprint factory pattern is giving werkzeug.routing.BuildError: Could not build url for endpoint 'admin.static'
在Flask-Admin Blueprint工廠模式中,當我嘗試訪問http://127.0.0.1:5000/users/時出現以下錯誤當我嘗試在瀏覽器中打開端點時,給出了應用程序的完整堆棧跟蹤
File "/home/maverick/.local/lib/python3.5/site-packages/flask_admin/base.py", line 308, in render
return render_template(template, **kwargs)
File "/home/maverick/.local/lib/python3.5/site-packages/flask/templating.py", line 135, in render_template
context, ctx.app)
File "/home/maverick/.local/lib/python3.5/site-packages/flask/templating.py", line 117, in _render
rv = template.render(context)
File "/home/maverick/.local/lib/python3.5/site-packages/jinja2/environment.py", line 1008, in render
return self.environment.handle_exception(exc_info, True)
File "/home/maverick/.local/lib/python3.5/site-packages/jinja2/environment.py", line 780, in handle_exception
reraise(exc_type, exc_value, tb)
File "/home/maverick/.local/lib/python3.5/site-packages/jinja2/_compat.py", line 37, in reraise
raise value.with_traceback(tb)
File "/home/maverick/.local/lib/python3.5/site-packages/flask_admin/templates/bootstrap3/admin/model/list.html", line 6, in top-level template code
{% import 'admin/model/row_actions.html' as row_actions with context %}
File "/home/maverick/.local/lib/python3.5/site-packages/flask_admin/templates/bootstrap3/admin/master.html", line 1, in top-level template code
{% extends admin_base_template %}
File "/home/maverick/.local/lib/python3.5/site-packages/flask_admin/templates/bootstrap3/admin/base.html", line 14, in top-level template code
{% block head_css %}
File "/home/maverick/.local/lib/python3.5/site-packages/flask_admin/templates/bootstrap3/admin/base.html", line 15, in block "head_css"
<link href="{{ admin_static.url(filename='bootstrap/bootstrap3/swatch/{swatch}/bootstrap.min.css'.format(swatch=config.get('FLASK_ADMIN_SWATCH', 'default')), v='3.3.5') }}" rel="stylesheet">
File "/home/maverick/.local/lib/python3.5/site-packages/jinja2/runtime.py", line 579, in _invoke
rv = self._func(*arguments)
File "/home/maverick/.local/lib/python3.5/site-packages/flask_admin/templates/bootstrap3/admin/static.html", line 2, in template
{{ get_url('admin.static', *varargs, **kwargs) }}
File "/home/maverick/.local/lib/python3.5/site-packages/flask_admin/base.py", line 390, in get_url
return url_for(endpoint, **kwargs)
File "/home/maverick/.local/lib/python3.5/site-packages/flask/helpers.py", line 356, in url_for
return appctx.app.handle_url_build_error(error, endpoint, values)
File "/home/maverick/.local/lib/python3.5/site-packages/flask/app.py", line 2061, in handle_url_build_error
reraise(exc_type, exc_value, tb)
File "/home/maverick/.local/lib/python3.5/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/home/maverick/.local/lib/python3.5/site-packages/flask/helpers.py", line 345, in url_for
force_external=external)
File "/home/maverick/.local/lib/python3.5/site-packages/werkzeug/routing.py", line 2181, in build
raise BuildError(endpoint, values, method, self)
werkzeug.routing.BuildError: Could not build url for endpoint 'admin.static' with values ['filename', 'v']. Did you mean 'static' instead?
應用程序/ __ init__.py
def create_app(config_class=Config):
app = Flask(__name__)
app.config.from_object(config_class)
# extension initiation
[...]
# factory registration
[...]
from app.admin.core import MicroModelView # subclass of ModelView
from app.models import User # db table
f_admin = Admin(
app,
name='new admin',
index_view=MicroModelView(User, db.session, endpoint='users', url='/users'),
template_mode='bootstrap3',
)
應用程序/管理/ core.py:
class MicroModelView(ModelView):
page_size = 5
問題是什么,如何解決?
該錯誤是由你設置引起index_view
到ModelView
子類。 不要那樣做。
通常, index_view
設置為AdminIndexView()
類的實例,並且此類注冊admin.static
視圖以處理管理UI中使用的靜態文件(模板中使用的Javascript和CSS文件)。
但ModelView
子類不提供這些。 您需要使用admin.add_view()
調用注冊:
f_admin = Admin(
app,
name='new admin',
template_mode='bootstrap3',
)
f_admin.add_view(MicroModelView(User, db.session, endpoint='users', url='/users'))
如果要更改默認/admin/
page行為,則需要AdminIndexView
類並覆蓋其index
方法; 您可以重定向到users
視圖,例如:
# additional imports
from flask import redirect
from flask_admin import AdminIndexView, expose
class MicroModelAdminIndexView(AdminIndexView):
@expose
def index(self):
return redirect('users.index')
f_admin = Admin(
app,
name='new admin',
template_mode='bootstrap3',
index_view=MicroModelAdminIndexView()
)
f_admin.add_view(MicroModelView(User, db.session, endpoint='users', url='/users'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.