【问题标题】:Can I use one route for multiple functions?我可以将一条路线用于多种功能吗?
【发布时间】:2014-04-21 19:13:12
【问题描述】:

我是使用 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', ...)

或者可能是这样的 - 相同的路线但两个不同的定义:

# 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?您的 if 在示例中会是什么样子?
  • @dim:我编辑了帖子并添加了附加说明。

标签: python flask jinja2 werkzeug


【解决方案1】:

您可以使用 URL 查询字符串参数。基本上传递一个查询字符串参数,如&lt;a href="{{ url_for('user', user_name=name, user_id=id, settings='true') }}"&gt;Settings&lt;/a&gt;,这将导致&lt;a href="/sammy/873?settings=true"&gt;Settings&lt;/a&gt;

在视图中,您可以检查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', ...)

【讨论】:

    猜你喜欢
    • 2018-11-23
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 2014-12-15
    • 2018-04-22
    • 1970-01-01
    • 2021-08-23
    • 2017-08-04
    相关资源
    最近更新 更多