使用 Flask url_for 动态构建 URL 的最佳方法
Best method for dynamically building URL with Flask url_for
我必须用 url_for 在 JavaScript 中创建一个 URL 因为我应该使用整个 table 行作为 link 我不能这样做在 HTML。示例如下:
{% for x in last_orders %}
<tr id="x">
<td>something here</td>
<td>something here</td>
</tr>
{% endfor %}
和烧瓶:
@app.route("/some/page/<int:id>/", methods=['POST', 'GET'])
def xxx_page(id):
我可以通过使用 Jquery 函数 .click() 使 table 行像 link 一样,但是使用这种方法我无法以正确的方式使用 url_for。
我在另一个主题中看到我可以使用 Post 发送变量,但我不想更改我的 URL 系统,因为这对用户更友好。
也许我可以用 url_for (/some/page/0) 创建虚拟 URL,然后用 JavaScript 更改该字符串,但我不确定这种方法是否最好。
编辑:我的方法是这样的:
$(".row").click(function() {
var id = $(this).attr("id");
var where = `{{ url_for('xxx_page', id=0) }}`;
where = where.slice(0,-2).concat(id + "/");
window.location = where;
});
如果 last_orders
的元素包含 xxx_page
函数中使用的前缀,那么您可以在 td
中创建一个 a
标记。
<td><a href={{ url_for('{}_page'.format(x)) }}>something here</a></td>
编辑: 重读您的问题后,您希望使整个单元格都可以点击。 JavaScript 中有几个选项。您可以监听对所有 td
元素的点击,然后触发对其子 a
.
的点击
# Don't actually use an anonymous function. Define it elsewhere.
$('body').off('click.order')
.on('click.order', 'td', function(e) {
$(this).find('a').trigger('click');
});
或者(我比第一个选项更不喜欢这个选项)你可以在 td
元素上设置一个数据元素与地址。
<td data-url='{{ url_for('{}_page'.format(x)) }}'>something here</td>
然后在您的 click
侦听器中执行此操作。
window.location.href = $(this).attr('data-url');
我必须用 url_for 在 JavaScript 中创建一个 URL 因为我应该使用整个 table 行作为 link 我不能这样做在 HTML。示例如下:
{% for x in last_orders %}
<tr id="x">
<td>something here</td>
<td>something here</td>
</tr>
{% endfor %}
和烧瓶:
@app.route("/some/page/<int:id>/", methods=['POST', 'GET'])
def xxx_page(id):
我可以通过使用 Jquery 函数 .click() 使 table 行像 link 一样,但是使用这种方法我无法以正确的方式使用 url_for。
我在另一个主题中看到我可以使用 Post 发送变量,但我不想更改我的 URL 系统,因为这对用户更友好。
也许我可以用 url_for (/some/page/0) 创建虚拟 URL,然后用 JavaScript 更改该字符串,但我不确定这种方法是否最好。
编辑:我的方法是这样的:
$(".row").click(function() {
var id = $(this).attr("id");
var where = `{{ url_for('xxx_page', id=0) }}`;
where = where.slice(0,-2).concat(id + "/");
window.location = where;
});
如果 last_orders
的元素包含 xxx_page
函数中使用的前缀,那么您可以在 td
中创建一个 a
标记。
<td><a href={{ url_for('{}_page'.format(x)) }}>something here</a></td>
编辑: 重读您的问题后,您希望使整个单元格都可以点击。 JavaScript 中有几个选项。您可以监听对所有 td
元素的点击,然后触发对其子 a
.
# Don't actually use an anonymous function. Define it elsewhere.
$('body').off('click.order')
.on('click.order', 'td', function(e) {
$(this).find('a').trigger('click');
});
或者(我比第一个选项更不喜欢这个选项)你可以在 td
元素上设置一个数据元素与地址。
<td data-url='{{ url_for('{}_page'.format(x)) }}'>something here</td>
然后在您的 click
侦听器中执行此操作。
window.location.href = $(this).attr('data-url');