在 Flask 中为 url_for 创建动态参数 [英] Create dynamic arguments for url_for in Flask

查看:41
本文介绍了在 Flask 中为 url_for 创建动态参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 jinja2 模板,可用于不同的 Flask 路由.所有这些路由都有一个必需的参数并且只处理 GET 请求,但有些路由可能有额外的参数.

I have a jinja2 template which I reuse for different Flask routes. All of these routes have a single required parameter and handle only GET requests, but some routes may have extra arguments.

有没有办法将额外的参数附加到 url_for() 上?

Is there a way to append extra arguments onto url_for()?

类似的东西

url_for(my_custom_url, oid=oid, args=extra_args)

将渲染到(取决于路由端点):

which will render to (depending on the route endpoint):

# route 'doit/<oid>' with arguments
doit/123?name=bob&age=45

# route 'other/<oid>' without arguments
other/123

我的用例是提供带有预定义查询参数的链接:

My use case would be to provide links with predefined query arguments:

<a href=" {{ url_for('doit', oid=oid, args=extra_args }} ">A specific query</a>
<a href=" {{ url_for('other', oid=oid) }} ">A generic query</a>

我想在没有 JavaScript 的情况下运行此模板,因此我不想分配点击侦听器并使用 AJAX 为每个链接执行 GET 请求(如果可能).

I would like to run this template without JavaScript, so I would not like to assign a click listener and use AJAX to do a GET request for each link if that is possible.

推荐答案

任何与路由参数不匹配的参数都将作为查询字符串添加.假设 extra_args 是一个 dict,只需解压即可.

Any arguments that don't match route parameters will be added as the query string. Assuming extra_args is a dict, just unpack it.

extra_args = {'hello': 'world'}
url_for('doit', oid=oid, **extra_args)
# /doit/123?hello=world
url_for('doit', oid=oid, hello='davidism')
# /doit/123?hello=davidism

然后在视图中使用 request.args 访问它们:

Then access them in the view with request.args:

@app.route('/doit/<int:oid>')
def doit(oid)
    hello = request.args.get('hello')
    ...

这篇关于在 Flask 中为 url_for 创建动态参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆