我可以使用一种途径进行多种功能吗?

时间:2014-03-16 16:55:04

标签: python flask jinja2 werkzeug

我是一个使用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中输出的内容: output from oracle em dbconsole

如您所见,有两个链接,但它们具有相同的Oracle RMAN ID (这很重要,因为对数据库的查询具有相同的WHERE子句,例如: SELECT ... FROM ... WHERE SESSION_RECID = :parrent_id)。所以:

  • 当我点击列#34;备份名称&#34;中的链接时我想渲染一个模板。
  • 当我点击列#34;状态&#34;中的链接时我想渲染另一个模板。

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

1 个答案:

答案 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', ...)