我是一个使用Flask框架的新手用户,我试图实现以下问题。
我为用户提供两个链接的网页:
<a href="{{ url_for('user', user_name=name, user_id=id) }}">Settings</a>
<a href="{{ url_for('user', user_name=name, user_id=id) }}">Details</a>
在py
文件中我想实现以下功能 - 一条路线,但两种行为取决于用户操作:
@app.route("/<user_name>/<int:user_id>")
def user(user_name, user_id):
# if user click on the "Settings" link then:
# ...
# some code
# ...
return render_template('user_settings.html', ...)
# if user click on the "Details" link then:
# ...
# some code
# ...
return render_template('user_details.html', ...)
或者类似的东西 - 相同的路线,但两个不同的def:
# if user click on the "Settings" link then:
@app.route("/<user_name>/<int:user_id>")
def user_settings(user_name, user_id):
# ...
# some code
# ...
return render_template('user_settings.html', ...)
# if user click on the "Details" link then:
@app.route("/<user_name>/<int:user_id>")
def user_details(user_name, user_id):
# ...
# some code
# ...
return render_template('user_details.html', ...)
请给我一些提示,因为我不知道该怎么做?在此先感谢您的帮助! : - )
修改 @dim:问我为什么要拥有相同的URL?以上问题,它只是一个更好地理解我想要的例子。实际上,我在包含行和列的表中输出了输出。在Oracle Enterprise Manager中输出的内容:
如您所见,有两个链接,但它们具有相同的Oracle RMAN ID (这很重要,因为对数据库的查询具有相同的WHERE
子句,例如: SELECT ... FROM ... WHERE SESSION_RECID = :parrent_id
)。所以:
总之,我想渲染两个不同的模板取决于具有相同端点的链接。
答案 0 :(得分:4)
您可以使用URL查询字符串参数。基本上传递一个查询字符串参数,如<a href="{{ url_for('user', user_name=name, user_id=id, settings='true') }}">Settings</a>
,这将导致<a href="/sammy/873?settings=true">Settings</a>
。
在视图中,您可以检查是否存在settings
参数,然后提供正确的模板。
@app.route("/<user_name>/<int:user_id>")
def user_details(user_name, user_id):
# ...
# some code
# ...
if request.args.get('settings'):
return render_template('user_settings.html', ...)
else:
return render_template('user_details.html', ...)