【问题标题】:Python Flask pagination submits only last pagePython Flask 分页只提交最后一页
【发布时间】:2018-08-26 15:12:48
【问题描述】:

我有一个 sqlalchemy 查询,它呈现一个带有几个设置的模板。

您可以在下面找到非常简化的代码,以了解正在发生的事情。此代码在每个页面上都放置了一个用于设置的复选框字段,目前没有固定的 nr 设置,这取决于表格的大小。就分页而言,这很好用。我可以转到下一页和上一页。

页面上的提交按钮只发布最后一页的复选框值。是否还可以记住和/或保存所有页面的输入,而不仅仅是最后一页?

@app.route('/settings')
def settings():

page = request.args.get('page', 1, type=int)
settings = Settings.query.paginate(page, 1, False)

next_url = url_for('settings', page=settings.next_num) \
    if settings.has_next else None

prev_url = url_for('settings', page=settings.prev_num) \
    if settings.has_prev else None

inputtype = 'checkbox'

return render_template("settings.html", 
            settings = settings,
            inputtype = inputtype,
            next_url = next_url, 
            prev_url = prev_url
            )

模板会是这样的。

<div class="form-check">
{% for setting in settings %}                    
<input type="{{ inputtype  }}" value="{{ setting }}" {{ setting }}  
{% endfor %}   
<div class=pagination>
{% if prev_url %}
<a href=" {{ prev_url }} "> Previous </a>
(% endif %}
{% if next_url %}
<a href=" {{ next_url }} "> Next </a>
{% endif %}
</div>
<div class="panel-footer">
<input class="btn btn-primary" role="button" type="submit" value="Submit">
</div>

【问题讨论】:

  • 我觉得我错过了真正知道发生了什么的模板。
  • 是的,刚刚添加到上面的问题中

标签: python flask pagination flask-sqlalchemy


【解决方案1】:

我在不使用 javascript 的情况下解决了这个问题。我遇到了这个答案,似乎可以解决问题。它只是做一个发布请求并跳转到下一页。 @hugo,感谢您的回答,它确实帮助我找到了正确的方向。

Cannot Generate a POST Request on Flask using url_for

【讨论】:

  • 我还是有点困惑我现在也有同样的问题,我有 36 个左右的页面,上面有单选按钮,但只有最后一个被选中的页面会被发布。
  • 请发布一些代码,以便我们尝试提供帮助
  • 我设法用 jquery ajax 做到了,它不会一次性保存所有内容,但是当您从一页移动到另一页时,它会保存
  • 我是这样解决的,您可能需要对其进行一些更改以适应您的应用程序。 if request.method == "POST": if request.form["submit"] == "next": do_something() if quiz.has_next: next_url = url_for('foo', **kwargs) 模板包含以下内容行:
【解决方案2】:

我觉得如果您提交,您只提交当前页面上的设置。页面上只有当前设置,将所有设置都添加到页面上没有多大意义。

我认为,如果您使用链接转到上一个和下一个设置,则在多个页面上不可能实现您想要的。 如果您在第 1 页上进行了更改,然后单击下一步,则在第 1 页上所做的更改不会保存在任何地方,因此它们会丢失。

也许可以将上一个和下一个也发布到设置。这样您就可以从该页面获取设置,并可以创建一个临时设置对象,您可以在单击提交时对其进行处理。

【讨论】:

  • 是的,这就是我害怕的,事实上它就是这样工作的。如果您考虑一下,这是一种合乎逻辑的工作方式。关于如何获得下一个按钮来执行发布请求的任何想法?我在网上找不到有关此主题的任何内容。
  • 如果我理解正确,这只能用javascript实现,没有python方法可以做到这一点?
  • 在 python 中没有办法做到这一点,因为浏览器需要对你的烧瓶应用程序进行 HTTP POST,因此页面不仅需要在提交时进行 HTTP POST,而且还需要在以前和下一页。
猜你喜欢
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多