python – 我可以使用一个路由来实现多种功能吗?

我是一个使用Flask框架的新手用户,我正在尝试实现以下问题.

我为用户提供了两个链接的网页:

>设置< a href =“{{url_for('user',user_name = name,user_id = id)}}”>设置< / a>
>详细信息< a href =“{{url_for('user',user_name = name,user_id = id)}}”>详细信息< / 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).所以:

>当我点击“备份名称”列中的链接时,我想渲染一个模板.
>当我点击“状态”列中的链接时,我想渲染另一个模板.

总之,我想渲染两个不同的模板取决于具有相同端点的链接.

最佳答案
您可以使用URL查询字符串参数.基本上传递查询字符串参数,例如< a href =“{{url_for('user',user_name = name,user_id = id,settings ='true')}}”>设置< / a>这将导致< a href =“/ sammy / 873?settings = true”>设置< / 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', ...)

转载注明原文:python – 我可以使用一个路由来实现多种功能吗? - 代码日志