from flask import url_for
- url
- 带参
url
,get
方式提交的键值对
www.mamengli.com?a=username&b=password
第一个参数与网址用‘?’
隔开,参数之间的连接用‘&‘
- 动态
url
www.mamengli.com/topic/user/id
这里面的id
是一个变量,需要传值进去
- 带参
- 带参
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
下面的两种写法都可以; - 一个视图函数处理两种情况,不发送数据呢,就显示全部,发送数据,就显示对应部分;
- 动态
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
,那么参数怎么传递呢?
-
直接传递
- 装饰器中,变量由
< >
包裹,string
或int
可以将参数进行数据转换; - 视图函数中的参数必须和装饰器中的参数对应,可以直接传递过来;
那么前端
html
怎么传递url
参数呢?可以利用flask
内置函数url_for()
进行传递:
<a href="{{ url_for('index.user',id= u.id ) }}">
- 装饰器中,变量由
网友评论