flask 之 url_for()

2018-01-07  本文已影响0人  马梦里

from flask import url_for

  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>
  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 ) }}">

上一篇 下一篇

猜你喜欢

热点阅读