flask--url_for函数

本文详细介绍了Flask框架中url_for函数的基本用法及其应用场景,包括如何通过视图函数名构建URL、实现页面跳转等,并展示了如何处理动态路由。

一直以来对url_for函数的用法很模糊,看了一篇文章终于有些了解了。https://blog.csdn.net/yannanxiu/article/details/52287870

url_for()函数是用于构建指定函数的URL。

url_for操作对象是函数,而不是route里的路径。
写一个测试代码:

from flask import Flask,url_for

app = Flask(__name__)

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

@app.route('/login')
def login():
    return "world"

with app.test_request_context():
    print(url_for('index'))
    print(url_for('login'))

运行后结果是这样的:

/
/login

然后我将login()这个函数名字改为LOGIN(),再次运行,然后就报错了。因为这时候不再有login()这个函数存在了,url_for不能构造关于login的新链接了。

BuildError: Could not build url for endpoint ‘login’. Did you mean ‘index’ instead?

在python+flask的web开发中,url_for() 函数最简单的用法是以视图函数名作为参数, 返回对应的 URL。还可以用redirect函数进行跳转。它是重定向函数,输入一个URL后,自动跳转到另一个URL所在的地址,下面是一段代码实例。

from flask import Flask,url_for,render_template,redirect
app = Flask(__name__)

@app.route('/')
def index():
    return redirect(url_for('user_index',username='default'))

@app.route('/user/<username>/<userid>')
def user_index(username,userid):
    return render_template('index.html',username=username)

执行上面这代码的时候,我们访问程序给出的http://127.0.0.1/5000页面,这时由于redirect函数的作用,页面会跳转到由url_for函数生成的链接的页面。显示index.html里面的内容。我们可以看到,usr_for函数的第一个参数是函数名user_index,就是说,它会返回user_index对应的URL,也就是http://127.0.0.1/5000/user/defualt

对于url_for的一点新发现
先贴代码:

class Course(Base):    
    ...
    @property
        def url(self):
        return url_for('course.detail',course_id=self.id)

上面这个类是一个数据库的映射对象,对应数据库的一张表。为了后面方便,我给它增加了一个url属性。可以看到,url_for函数的第一个参数是‘course.detail’。detail这个函数在另一个python模块中,并且course这个文件夹和当前这段代码所在的文件夹并不在同一目录。所以这一点我觉得有点奇怪。

还有一个点,使用url_for() 生成动态地址时, 将动态部分作为关键字参数传入。例如,

url_for ('user', name='john', _external=True)

的返回结果是http://localhost:5000/user/john。 传入url_for() 的关键字参数不仅限于动态路由中的参数。函数能将任何额外参数添加到 查询字符串中。例如,url_for(‘index’, page=2) 的返回结果是/?page=2。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值