【问题标题】:Sending Flask variable from HTML back to Flask with url_for()使用 url_for() 将 Flask 变量从 HTML 发送回 Flask
【发布时间】:2019-04-06 14:12:24
【问题描述】:

我正在尝试创建一个小工作板,每个工作卡都是从列表中的烧瓶中动态插入的(现在,稍后将是一个 SQL DB)

当用户单击按钮View Task 时,我希望它转到另一个页面,在该页面中更详细地显示任务/作业。

我想要附加到该按钮的是作业/任务 ID。

这就是我希望/期望按钮发挥作用的方式

{% for task in available_tasks %}
<div>
   <a href="{{ url_for('view_task', task_id={{ task['id'] }}) }}">View Task</a>
</div>
{% endfor %}

然后可以将其粘贴到将 ID 作为参数并获取完整作业/任务信息的路由中。

app.route('/view_task/<task_id>')
def view_task(task_id):
   task_data = task_database[taskid]
   return render_template('detailed_view.html', task_info=task_data)

我的问题是href="url_for('view_task', task_id={{ task['id'] }})" 不起作用,有没有办法做到这一点?

【问题讨论】:

  • 是的,这就是通常的做法。我不确定你在问什么; 发回动态数据的更好方法非常广泛的。
  • 它不工作? href="url_for('view_task', task_id={{ task['id'] }})" 它不承认争论。我可以做 task_id='1' 似乎不喜欢 jinja {{ }}
  • 啊,是的,你把语法弄混了一点。 但您没有告诉我们您有错误。如有问题,请显示完整的错误消息,并尽可能回溯。
  • 而且由于您在此处没有错误,只是输出不正确,因此如果您显示它会很有帮助。请务必查看 Flask 返回给浏览器的 HTML,而不仅仅是浏览器呈现的结果。您会看到 href="..." 值有点偏离,不包含实际 URL。

标签: python flask jinja2


【解决方案1】:

您生成了输出 href="url_for('view_task', task_id=&lt;some id&gt;)",因此文字文本 url_for(..) 在生成的 HTML 中并传送到您的浏览器,HTML 引擎不会将该字符串识别为任何内容的有效 URL。

你需要把url_for()函数放在{{ ... }}括号里,而不仅仅是任务id值:

href="{{ url_for('view_task', task_id=task['id']) }}"

只有这样url_for()才会真正被视为Jinja2执行的表达式,此时HTML生成的将包含href="http://localhost:5000/view_task/&lt;some id&gt;"字符串。

【讨论】:

    猜你喜欢
    • 2020-08-09
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    相关资源
    最近更新 更多