美文网首页
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