如何在flaskappbuilder中路由url?

问题描述 投票:0回答:1

我正在关注这个 Flaskappbuilder 示例。但是,当我想路由到不同的网址时,例如对于

method3
中的
views.py
,如果我想路由到
/method3/jonh
而不是
myview/method3/jonh
,它将返回错误:
the requested url was not found on the server. if you entered the url manually please check your spelling and try again.
我不明白为什么我们需要
myview
?我如何路由到与示例不同的 url?

views.py
中,我将
appbuilder.add_link("Method3", href='/myview/method3/jonh', category='My View')
更改为
appbuilder.add_link("Method3", href='/method3/jonh', category='My View')
。如果你把它改成任何其他的,比如
appbuilder.add_link("Method3", href='/myview1/method3/jonh'
,也会发生同样的错误。

python flask flask-appbuilder
1个回答
0
投票

您遇到了一些事情。

首先,BaseView 类的构造函数将使用类名将 Flask 上公开的 url 注册为蓝图,除非通过设置 Route_base 进行覆盖。所以在这个例子中,MyView 的 URL /myview/... 除非你专门设置它。

其次,add_link 只是将 href 中的任何内容添加到菜单中 - 它不会创建或定义任何内容,只是指向 href。你可以 href = "/foo" 它只会尝试将你发送到那里。如果它不存在,任何服务器(在本例中为 Flask 的)都会以 Not Found 的方式响应。

这个例子试图说明你不必调用add_view三次,因为BaseView是在你第一次调用它时构造的。之后,您就可以使用路径来访问方法。

要获得您正在寻找的行为,您可以设置route_base:

class MyView(BaseView):
    route_base = "/" #This will set the blueprint route
    default_view = "method1"
...
# This returns Not Found because the url to MyView is now NOT /myview/
appbuilder.add_link("Method2", href="/myview/method2/jonh", category="My View")
# Since we overrode it, this now works
appbuilder.add_link("Method3", href="/method3/jonh", category="My View")
© www.soinside.com 2019 - 2024. All rights reserved.