url_for用于Flask-Admin中基于类的视图

kur*_*tgn 7 python flask flask-admin

我有一个基于类的管理员视图:

class All_RDPs(BaseView):
    @expose('/')
    def index(self):
        return 'ok1'
    @expose('/test')
    def testindex(self):
        return 'ok2'
Run Code Online (Sandbox Code Playgroud)

这是在Flask-Admin中注册的,如下所示:

admin.add_view(All_RDPs(name='dep_rdp'))
Run Code Online (Sandbox Code Playgroud)

然后可以从浏览器中查看,如下所示:

http://localhost/admin/all_rdps/
http://localhost/admin/all_rdps/test
Run Code Online (Sandbox Code Playgroud)

问题是:

  1. 如何指定此类的URL而不是默认生成的名称all_rdps
  2. 如何使用url_for这些端点生成网址?url_for('admin.All_RDPs.testindex'),url_for('admin.All_RDPs')不要工作.

mr.*_*lle 7

您可以通过将endpoint参数传递给视图类构造函数来覆盖端点名称:

admin = Admin(app)
admin.add_view(MyView(endpoint='testadmin'))
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您可以通过将视图方法名称与端点连接来生成链接:

url_for('testadmin.index')
Run Code Online (Sandbox Code Playgroud)

如果不覆盖端点名称,则可以使用小写类名称来生成URL,如:

url_for('myview.index')
Run Code Online (Sandbox Code Playgroud)

对于基于模型的视图,规则不同 - 如果未提供端点名称,则应使用模型类名称.默认情况下,ModelView还具有以下端点:.index_view,.create_view和.edit_view.因此,可以为名为"User"的模型生成以下URL:

# List View
url_for('user.index_view')

# Create View (redirect back to index_view)
url_for('user.create_view', url=url_for('user.index_view'))

# Edit View for record #1 (redirect back to index_view)
url_for('user.edit_view', id=1, url=url_for('user.index_view'))
Run Code Online (Sandbox Code Playgroud)

来源:Flask-Admin快速入门