flask中url_for的个人解读

本文探讨了在Flask框架中使用url_for函数进行重定向时,为何参数必须与目标函数的形参匹配的问题。通过分析源代码,了解到url_for将参数作为查询参数附加到URL,并在路由匹配时将这些参数传递给指定的端点函数。如果参数不匹配,将会导致错误。个人解读深入解析了这一机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在学习flask的重定向中,使用到了url_for这个函数(最后放源代码),如下面的代码:

from flask import Flask, redirect
# 从flask中导入url_for
from flask import url_for

app = Flask(__name__)

@app.route('/')
def index():
	return 'index'

@app.route('/user/<int:user_id>')
def demo1(user_id):
    return 'demo1 %s' % user_id

#重定向
@app.route('/redirect')
def demo2():
    # redirect() 跳转到某个页面
    # url_for() 根据指定的函数,查找到对应的路由
    return redirect(url_for('demo1', user_id='234'))

if __name__ == '__main__':
    app.run(debug=True)

这里的url_for函数能够接受好多参数,第一个是需要一个函数名(这里是’demo1’),后面的是该函数所需要的参数(这里是user_id=‘234’)。
问题出在函数所需的参数,这里的参数必须是和demo1里面所带的形参相同,否则会报错,如下:

werkzeug.routing.BuildError:
Could not build url for endpoint 'demo1' with values ['users_id']. Did you forget to specify values ['user_id']?

问题就是:为什么url_for当中传入的参数,为什么一定要和函数demo1中的形参一样?

首先,源代码中url_for的注释中的翻译为:使用提供的方法生成指向给定端点的URL。目标端点未知的变量参数将作为查询参数附加到生成的URL。 如果查询参数的值为“None”,则跳过整个对。 如果蓝图处于活动状态,您可以通过在本地端点前加一个点(“.``”)来快捷引用同一蓝图。
这里的给定端点就是demo1,提供的方法暂时不管,生成的URL就是指向demo1的,同时也会将url_for中带给demo1的参数作为查询参数附加到URL,即user_id=‘234’会作为查询参数在URL内,注意,user_id也在其中,而不仅仅是将’234’带入,生成的URL经过路由匹配,会将其中的user_id带入demo1中,如果匹配不到demo1的形参的话,就会报错,不能以其他的参数构建demo1,认为没有导入所需的参数。
个人解读注释。

url_for源代码

def url_for(endpoint, **values):
    """Generates a URL to the given endpoint with the method provided.

  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值