【问题标题】:How to reference a ModelView in flask-admin如何在 flask-admin 中引用 ModelView
【发布时间】:2013-12-06 19:00:08
【问题描述】:

获取 flask-admin ModelView 的 URL 的正确方法是什么?

这是一个非常简单的例子:

my_admin_view.py

from flask.ext.admin.contrib.sqla import ModelView
from common.flask_app import app
from models import db, User, Role

admin = Admin(app, name="Boost Admin")

admin.add_view(ModelView(User,  db.session, category="model"))
admin.add_view(ModelView(Role,  db.session, category="model"))

my_admin_template.html

...
<p>Check out my user admin link:</p>

<a href="{{ url_for('modelview.user') }}">User view link</a>
{#                   ______________ 
                     what argument to pass in here??      #}
...

传递给url_for(...) 的正确参数是什么?

我尝试过modelview.usermy_admin_view.modelview.user 等。它们似乎都没有正确解析,我想避免对链接进行硬编码。

谢谢!

【问题讨论】:

    标签: python flask flask-admin


    【解决方案1】:

    好的,我在阅读 ModelView 的源代码后想通了。

    首先,确保端点被命名(没有命名端点也可以这样做,但这会使代码更清晰):

    from flask.ext.admin.contrib.sqla import ModelView
    from models import db, User, Role
    
    admin = Admin(app, name="Boost Admin")
    
    admin.add_view(ModelView(User,db.session,category="model", endpoint="model_view_user"))
    admin.add_view(ModelView(Role,db.session,category="model", endpoint="model_view_role"))
    

    ...现在在模板中,您可以参考基本模型视图如下:

    URL for User model default view is: {{model_view_user.index_view}} 
    URL for Role model default view is: {{model_view_role.index_view}} 
    

    index_view 函数定义为 here,并实现了烧瓶管理员 ModelView 的默认视图。

    【讨论】:

    • 如果不提供端点,默认为(model_name+'view').lower()
    【解决方案2】:

    请参阅Flask-Admin introduction 中的Generating URLs 部分。

    它说“使用模型的小写名称作为前缀”。添加一个点和视图的名称。

    • index_view 获取概览列表。
    • create_view 用于创建新行。
    • edit_view 用于修改现有行。

    所以你可以轻松做到:

    url_for('user.index_view')
    url_for('role.create_view')
    url_for('user.edit_view', id=1)
    

    【讨论】:

      【解决方案3】:

      应该是

      url_for('admin.user')
      

      如果您阅读 flask-admin 文档 here,用于生成 URL,它清楚地说明:

      If you want to generate a URL for a particular view method from outside, the following rules apply:
      
      ....
      
      3. For model-based views the rules differ - the model class name should be used if an endpoint name is not provided. 
      

      【讨论】:

      • 感谢您的快速响应。我试过 admin.user、admin.User、my_admin_view.user 和 my_admin_view.User ....它们都会引发路由错误。 (BuildError: {'admin.user',{}, None})
      • 您的管理模板存储在哪里?可以分享一下项目的结构吗?
      • 项目一般符合Flask教程结构。管理模板存储在 /templates/admin 下的目录结构中,该目录结构反映了 flask-admin 分发包模板。我已经验证该目录成功地覆盖了默认的烧瓶管理模板(例如,通过临时添加一些 HTML 到 admin/base.html 以确保)。
      猜你喜欢
      • 1970-01-01
      • 2014-05-21
      • 2022-01-01
      • 2015-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多