在 Flask 中,如何在单击按钮时生成动态 URL?

2024-05-01

例如,现在如果我在表单元素中有两个按钮,当您单击其中任一按钮时,您将被定向到相应的配置文件。

<form action="{{ url_for('getProfile') }}" method="post">
    <button type="submit" name="submit" value="profile1"> View Profile</button>
    <button type="submit" name="submit" value="profile2"> View Profile</button>
</form>

在我的 apprunner.py 中,我有

 @app.route('/profile', methods=['POST'])
 def getProfile():
       if request.form['submit'] = 'profile1':
            return render_template("profile1.html")
       else if request.form['submit'] = 'profile2':
            return render_template("profile2.html")

但是,我的问题是,当我单击任一按钮时,网址始终会类似于“127.0.0.1:5000/profile”。但是,我希望它看起来像“http://127.0.0.1:5000/profile1 http://127.0.0.1:5000/profile1" or "http://127.0.0.1:5000/profile2 http://127.0.0.1:5000/profile2".

我一直在寻找有关如何在线生成动态 URL 的解决方案,但它们都不适用于按钮单击。

提前致谢!


@app.route('/profile<int:user>')                                                                                                   
def profile(user):                                                                                                             
    print(user)

您可以在 REPL 上测试它:

import flask
app = flask.Flask(__name__)

@app.route('/profile<int:user>')
def profile(user):
    print(user)

ctx = app.test_request_context()
ctx.push()

flask.url_for('.profile', user=1)
'/profile1'

EDIT:

你如何通过user新路线的参数取决于您的需要。如果您需要硬编码路线profile1 and profile2你可以通过user=1 and user=2分别。如果您想以编程方式生成这些链接,取决于这些配置文件的存储方式。

否则你可以redirect代替render_template,到url_for与请求对象中解析的元素。这意味着有两条路线

@app.route('/profile<int:user>')
def profile_pretty(user):
    print(user)

@app.route('/profile', methods=['POST'])
def getProfile():
      if request.form['submit'] = 'profile1':
           return redirect(url_for('.profile_pretty', user=1))
       else if request.form['submit'] = 'profile2':
            return redirect(url_for('.profile_pretty', user=2))

caveat:这会让你的路由看起来像你想要的那样,但是这是低效的,因为它每次都会生成一个新的请求,只是为了让你的网址成为你想要的方式。此时可以安全地询问why您是否想要为静态内容动态生成路由。


正如中所解释的http://exploreflask.com/en/latest/views.html#url-converters http://exploreflask.com/en/latest/views.html#url-converters

当您在 Flask 中定义路由时,您可以指定其中将被转换为 Python 变量并传递给视图函数的部分。

@app.route('/user/<username>')
def profile(username):
    pass

URL 标记部分中的任何内容都将作为用户名参数传递到视图。您还可以指定一个转换器来在将变量传递到视图之前对其进行过滤。

@app.route('/user/id/<int:user_id>')
def profile(user_id):
    pass

在此代码块中,URLhttp://myapp.com/user/id/Q29kZUxlc3NvbiEh http://myapp.com/user/id/Q29kZUxlc3NvbiEh将返回 404 状态代码 – 未找到。这是因为 URL 中应该是整数的部分实际上是字符串。

我们还可以有第二个视图来查找字符串。这将被称为 /user/id/Q29kZUxlc3NvbiEh/ 而第一个将被称为 /user/id/124。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Flask 中,如何在单击按钮时生成动态 URL? 的相关文章

  • Mac OS X 中文件系统的 Unicode 编码在 Python 中不正确?

    在 OS X 和 Python 中处理 Unicode 文件名有点困难 我试图在代码中稍后使用文件名作为正则表达式的输入 但文件名中使用的编码似乎与 sys getfilesystemencoding 告诉我的不同 采取以下代码 usr b
  • Keras:如何保存模型或权重?

    如果这个问题看起来很简单 我很抱歉 但是阅读 Keras 保存和恢复帮助页面 https www tensorflow org beta tutorials keras save and restore models https www t
  • 如何使用文本相似性删除 pandas 数据框中相似(不重复)的行?

    我有数千个数据 这些数据可能相似也可能不相似 使用 python 的默认函数 drop duplicates 并没有真正的帮助 因为它们只检测相似的数据 例如 如果我的数据包含类似以下内容怎么办 嗨 早上好 嗨 早上好 Python 不会将
  • Emacs 24.x 上的 IPython 支持

    我对 IPython 与 Emacs 的集成感到困惑 从 Emacs 24 开始 Emacs 附带了自己的python el 该文件是否支持 IPython 还是仅支持 Python 另外 维基百科 http emacswiki org e
  • 一段时间后终止线程的最 Pythonic 方法

    我想在线程中运行一个进程 它正在迭代一个大型数据库表 当线程运行时 我只想让程序等待 如果该线程花费的时间超过 30 秒 我想终止该线程并执行其他操作 通过终止线程 我的意思是我希望它停止活动并优雅地释放资源 我认为最好的方法是通过Thre
  • 如何改变HTML5视频的播放速度?

    如何更改 HTML5 中的视频播放速度 我查过视频标签的属性 https www w3schools com html html5 video asp在 w3school 但无法做到这一点 根据这个网站 http www chipwreck
  • Django send_mail SMTPSenderRefused 530 与 gmail

    一段时间以来 我一直在尝试使用 Django 从我正在开发的网站接收电子邮件 现在 我还没有部署它 并且我正在使用Django开发服务器 我不知道这是否会影响它 这是我的 settings py 配置 EMAIL BACKEND djang
  • iframe 重新加载按钮

    我浏览了很多网站 但似乎没有一个能正常工作 或者我不明白它们 我想要一个刷新某个 iframe 的简单按钮 该按钮将位于父页面上 并且 iframe 名称为 Right 有很多方法可以做到这一点 假设这个iframe markup 我们可以
  • HTML colorpicker 发生变化时如何获取新值?

    我正在开发一个需要更改 HTML 颜色的网络应用程序canvas基于的价值观colorpicker 我有一个colorpicker在我需要获取的 HTML 中value从每次更新开始
  • pytest:同一接口的不同实现的可重用测试

    想象一下我已经实现了一个名为的实用程序 可能是一个类 Bar在一个模块中foo 并为其编写了以下测试 测试 foo py from foo import Bar as Implementation from pytest import ma
  • 通过索引访问Python字典的元素

    考虑一个像这样的字典 mydict Apple American 16 Mexican 10 Chinese 5 Grapes Arabian 25 Indian 20 例如 我如何访问该字典的特定元素 例如 我想在对 Apple 的第一个
  • 使用 Pandas 计算 delta 列

    我有一个数据框 如下所示 Name Variable Field A 2 3 412 A 2 9 861 A 3 5 1703 B 3 5 1731 A 4 0 2609 B 4 0 2539 A 4 6 2821 B 4 6 2779 A
  • 使用“默认”环境变量启动新的子进程

    我正在编写一个构建脚本来解析依赖的共享库 及其共享库等 这些共享库在正常情况下是不存在的PATH环境变量 为了使构建过程正常工作 让编译器找到这些库 PATH已更改为包含这些库的目录 构建过程是这样的 加载器脚本 更改 PATH gt 基于
  • 将seaborn.palplot轴添加到现有图形中以可视化不同调色板

    将seaborn人物添加到子图中是usually https seaborn pydata org examples cubehelix palette html创建图形时通过传递 ax 来完成 例如 sns kdeplot x y cma
  • SocketIO + Flask 检测断开连接

    我在这里有一个不同的问题 但意识到它可以简化为 如何检测客户端何时从页面断开连接 关闭其页面或单击链接 换句话说 套接字连接关闭 我想制作一个带有更新用户列表的聊天应用程序 并且我在 Python 上使用 Flask 当用户连接时 浏览器发
  • 在系统托盘中隐藏 tkinter 窗口 [重复]

    这个问题在这里已经有答案了 我正在制作一个程序来提醒我朋友的生日 这样我就不会忘记祝福他们 为此 我制作了两个 tkinter 窗口 1 First one is for entering name and birth date 2 Sec
  • gwt 中的垂直居中

    如何使用垂直面板在 gwt 中垂直居中 或者请告诉我有什么方法可以进行垂直居中 如果你想直接使用VerticalPanel从代码中 您需要使用setVerticalAlignment HasVerticalAlignment ALIGN M
  • Django Admin 中的反向内联

    我有以下 2 个型号 现在我需要将模型 A 内联到模型 B 的页面上 模型 py class A models Model name models CharField max length 50 class B models Model n
  • python 线程安全可变对象复制

    Is 蟒蛇的copy http docs python org 2 library copy html模块线程安全吗 如果不是 我应该如何在 python 中以线程安全的方式复制 deepcopy 可变对象 蟒蛇的GIL http en w
  • 将上下文管理器的动态可迭代链接到单个 with 语句

    我有一堆想要链接的上下文管理器 第一眼看上去 contextlib nested看起来是一个合适的解决方案 但是 此方法在文档中被标记为已弃用 该文档还指出最新的with声明直接允许这样做 自 2 7 版起已弃用 with 语句现在支持此

随机推荐