美文网首页
flask 之 url_for()

flask 之 url_for()

作者: 马梦里 | 来源:发表于2018-01-07 11:26 被阅读0次

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 和 参数 利用 ‘?’ 分隔;

<a href="{{ url_for('topic.index') }}?board_id={{ b.id }}"
    class="topic-tab current-tab">{{ b.title }}</a>

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

番外

<div class="inner">
    <a href="{{ url_for('topic.new')}}?board_id={{ bid }}" class="create_topic_btn">
    <!--<a href="{{ url_for('topic.new', board_id='' ) }}" class="create_topic_btn">-->
    <!--<a href="/topic/new?board_id={{ bid }}" class="create_topic_btn">-->
        <span class="span-success">发布话题</span>
    </a>
</div>
  • 这是对应上面 index() 视图函数的一段 html,奇妙之处在于,当前是什么板块,该 baord_id 的值,就是当前板块的 id,不知道这 bid 到底是啥;
  • href 下面的两种写法都可以;
  • 一个视图函数处理两种情况,不发送数据呢,就显示全部,发送数据,就显示对应部分;
  1. 动态 url
@main.route('/user/<string:id>')
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() 进行传递:
    <a href="{{ url_for('index.user',id= u.id ) }}">

相关文章

网友评论

      本文标题:flask 之 url_for()

      本文链接:https://www.haomeiwen.com/subject/lajpnxtx.html