我必须使用url_for在JavaScript中创建一个URL,因为我应该使用整个表行作为链接,我无法在HTML中执行此操作。以下示例:
{% for x in last_orders %}
<tr id="x">
<td>something here</td>
<td>something here</td>
</tr>
{% endfor %}
和Flask:
@app.route("/some/page/<int:id>/", methods=['POST', 'GET'])
def xxx_page(id):
我可以通过使用Jquery函数.click()使表行像链接一样但是使用这种方法我不能以正确的方式使用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;
});
答案 0 :(得分:0)
如果last_orders
的元素包含xxx_page
函数中使用的前缀,那么您只需在a
中制作td
标记。
<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');
});
OR(我喜欢这个选项比第一个选项少得多)你可以在td
元素上设置一个带有地址的数据元素。
<td data-url='{{ url_for('{}_page'.format(x)) }}'>something here</td>
然后在你的click
听众中,做到这一点。
window.location.href = $(this).attr('data-url');