Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中从数组中选择一项的优化解决方案_Python_Google App Engine_Jinja2 - Fatal编程技术网

Python中从数组中选择一项的优化解决方案

Python中从数组中选择一项的优化解决方案,python,google-app-engine,jinja2,Python,Google App Engine,Jinja2,我正在使用Google App Engine免费层和Python和Jinja2模板引擎 我的任务是对所有5000个项目投赞成票或反对票。为此,我在索引页面上使用以下查询 {% extends "base.html" %} {% block content %} {% for item in items if not item.voted %} //HTML goes here to display the item {% break %} {% endfor %} {% endblock %}

我正在使用Google App Engine免费层和Python和Jinja2模板引擎

我的任务是对所有5000个项目投赞成票或反对票。为此,我在索引页面上使用以下查询

{% extends "base.html" %}
{% block content %}
{% for item in items if not item.voted %}
//HTML goes here to display the item
{% break %}
{% endfor %}
{% endblock %}
我打破了循环,因为我想在索引页面上随时只显示一个项目。该项目可以随机选择,但不得投票。这是一个非常未经优化/懒惰的解决方案,在本地运行良好,但在AppEngine服务器上,这是一个昂贵的操作。在对某些项目进行投票后,我发现以下错误:

OverQuotaError: The API call datastore_v3.RunQuery() required more quota than is available.

有人能提出更好的解决方案吗?我在使用jinja2模板引擎方面的知识非常有限,因此我无法找到便宜的解决方案

有多种方法可以做到这一点

在实体中添加一个随机属性,然后使用limit=1查询1项,其中RandomProp>randomValue。这与Jinja2无关,因为Jinja只是一个模板引擎,应该在Python代码中完成,由3部分组成:修改模型以添加新属性,保存实体时将随机值分配给新属性,要显示数据时使用过滤器对新属性执行查询,属性大于其他随机值

在某处保留实体ID列表,并随机选择一个,然后按键从DB中获取


你能详细说明一下你的第一个选择吗?我认为它就像一个计数器,下次我将选择下一个大于计数器的项目,但我不确定如何在jinja2中实现它。jinja2是一个模板引擎,我所说的代码在您的控制器中,由3部分组成:1-模型定义,添加新道具。2-将实体保存到DB时,将其分配给新的属性随机值。3.当需要显示数据时,使用属性greatr在新属性上使用过滤器进行查询,然后使用另一个随机值。我猜我可能是错的:在后期大多数项目被投票时,这不会返回空项目。您如何选择另一个随机值和随机属性值?我不知道您的全部逻辑,但您需要了解tempates不是业务逻辑的场所,因此您的问题与Jinja2完全无关。我想你最好的选择是2-保留ID列表,并删除已投票的项目。或者可以使用AJAX。我们不能在这里教您如何设计解决方案。实际上,您可以执行query.filterEntity.random>random和Entity.voated==False