flask 之 url_for()

from flask import url_for

  • url
    • 带参 urlget 方式提交的键值对
      www.mamengli.com?a=username&b=password
      第一个参数与网址用 ‘?’ 隔开,参数之间的连接用 ‘&‘
    • 动态 url
      www.mamengli.com/topic/user/id
      这里面的 id 是一个变量,需要传值进去
  1. 带参 url
@main.route("/")
def index():
    u = current_user()
    board_id = request.args.get('board_id', 'all')
    if board_id == 'all':
        ms = Topic.all()
        ms = sorted(ms, key=lambda topic: topic.created_time, reverse=True)
    else:
        ms = Topic.all(board_id=board_id)
    bs = Board.all()
    return render_template("topic/index.html", ms=ms, bs=bs, bid=board_id, user=u)

前端 html 传参,这样也可以 get 传递进 url
带参 url 对应的视图函数不需要参数,里面的额键值对和传递数据的获取方式一致;
url 和 参数 利用 ‘?’ 分隔;

{{ b.title }}

‘?’ 是参数和 url 的连接符

番外


  • 这是对应上面 index() 视图函数的一段 html,奇妙之处在于,当前是什么板块,该 baord_id 的值,就是当前板块的 id,不知道这 bid 到底是啥;
  • href 下面的两种写法都可以;
  • 一个视图函数处理两种情况,不发送数据呢,就显示全部,发送数据,就显示对应部分;
  1. 动态 url
@main.route('/user/')
def user(id):
    u = User.one(id=id)
    topicss = User.topics(u.id)
    # print('u.id:', u.id)
    reply_topics = User.replied_topics(u.id)
    if u is None:
        return redirect(url_for('.index'))
    else:
        return render_template('profile.html', user=u, topics=topicss, reply_topics=reply_topics)

这是一个带变量的 url,那么参数怎么传递呢?

  1. 直接传递

    • 装饰器中,变量由 < > 包裹,stringint 可以将参数进行数据转换;
    • 视图函数中的参数必须和装饰器中的参数对应,可以直接传递过来;

    那么前端 html 怎么传递 url 参数呢?可以利用 flask 内置函数 url_for() 进行传递:

你可能感兴趣的:(flask 之 url_for())