小编iyu*_*ume的帖子

FastAPI:检索jinja2`url_for`的端点以给出跳转链接

功能说明

在烧瓶中这段代码:

@app.route('/')
def index():
    return ...
Run Code Online (Sandbox Code Playgroud)

或者

foo_router = Blueprint('foo', __name__)
@foo_router.route('/')
def index():
    return ...

app.register_blueprint(foo_router, url_prefix='/api')
Run Code Online (Sandbox Code Playgroud)

您可以使用这些方式url_for('index')来检索 url,例如https://hostname:8080/

或用于url_for('foo.index')检索 url,例如https://hostname:8080/api/foo

所需功能

用于类似url_for的跳转链接fastapiflask

额外的背景信息

我找到了一个实现该工具的技巧

创建url_naming.py并添加以下代码

from starlette.routing import Mount, Route

from .routers.foo.endpoints.area import index as foo_area_index

foo_router_for = Mount('/', routes=[
    Route('/area', foo_area_index, name='foo_area.index'),
])
Run Code Online (Sandbox Code Playgroud)

并在你的main.py添加中

from .url_naming import foo_router_for

app.add_route('/foo', foo_router_for, name='foo_area.index')
Run Code Online (Sandbox Code Playgroud)

在代码块中,我定义了name两次,因为name我在Route模型中定义的内容无法被FastAPI检测到,或者被FastAPI覆盖,并且这个impl没有任何意义,因为它需要写下真实的路由器名称而不是端点函数名称。

尽管如此,如果我想在一个文件中命名我的路由器,但该文件对 不起作用,该怎么办 …

python jinja2 python-3.x fastapi

4
推荐指数
1
解决办法
3869
查看次数

标签 统计

fastapi ×1

jinja2 ×1

python ×1

python-3.x ×1