flask和ajax,Flask flash和url_用于AJAX

我目前陷入了一个相当“大”的问题,我会尽量做到清晰和简洁。

我正在用Python开发一个工具,使用Flask。它应该是一个内部网。我的想法是我有一个客户页面。有它的名字,许多其他信息,和一个庞大的清单。

信息已经写入输入字段,因此用户只需在那里编辑它们,按enter键,页面就会重新加载已编辑的信息(使用闪烁的消息和咆哮发出通知)。

这个庞大的清单迫使我使用AJAX迁移到一个系统,因为我希望它在用户勾选框和输入内容时“实时”更新,而不必重新加载页面。

因此,我还将infos的基本输入转换为AJAX,以避免重新加载mage。

我遇到了两个问题:

第一个是Flask的消息闪烁功能。我有一个方法可以更新数据库中的客户机名称,闪烁一条消息(成功或失败,取决于许多事情),然后再次显示页面。为了避免页面重新加载,我使用AJAX管理表单提交。

问题是,我的python方法将刷新消息。一旦我回到我的html页面(因为它是AJAX,所以没有被重新加载),Jinja2的get flashed消息函数就不会返回任何东西,因为它没有被更新。因此,我不可能找回那些闪现的信息。

我怎样才能拿到这些?我看到的唯一解决方案是去掉flash的任何用法,编写我自己的消息sysème,我将从该方法返回,然后用javascript处理。这看起来难以置信的愚蠢,因为flash是Flask的一个特性,它被AJAX变成了“无用的”?我觉得我好像错过了什么。

(注意,到目前为止,我的flashed消息管理是在我的基本布局中进行的,它调用一个贯穿所有消息并显示为咆哮通知的模板)

第二个问题涉及url。这是我的表单,用于编辑客户名称:

如您所见,action属性使用url_for调用正确的方法来编辑客户机。我的方法是这样的:@mod.route('/edit//', methods=['POST'])

def edit_client_name(name):

所以url路径是/edit/the_client_name。因此,在编辑之后,如果要重新编辑此名称,则新URL是/edit/the_new_client_name。

显然,一旦调用了方法,我的AJAX就必须更改这个action属性,用新的URL替换它(以防用户希望在不更改页面/重新加载页面的情况下重新编辑名称)。这是我的第二期。

新名称存储在javascript中。操作仍然是旧的url。因此,我必须调用url_来使用新名称。我发现完全没有办法将Javascript变量传递给Jinja2。

我要这个:url_for('clients.edit_client_name', name=client.name)

变成这样:url_for('clients.edit_client_name', name=my_javascript_variable_one_way_or_another)

我只需要调用js函数来修改表单的一个属性,然后用这个新的url修改我的action属性,但是我没有办法做这个简单的事情,比如给Jinja2一个javascript变量,这在我看来是不太可能的。

这是我的两个问题。如何使flash与AJAX兼容?如何将javascript属性传递给Jinja2?

我真心希望能找到解决这两个“愚蠢”问题的办法。我能看到的唯一解决方案是编写我自己的消息传递系统,这将挫败flash的目标,使它与看起来愚蠢的AJAX无用,并在我的模板中硬编码URL,这完全挫败了Flask使URL独立于方法的最初兴趣,URL的更改非常灵活。

谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值