如何在 Flask 中跨多个页面显示列表?

Luc*_*kyB 1 html python jinja2 flask

在 Flask 中,我试图跨多个页面显示项目的动态列表。列表的大小可能会超过 1000。

app.py我有一条路线,例如:

@app.route('/displayitems')
def displayitems():
   item_list = ['item1', 'item2', 'item3'] # Up to 1000 items
   return render_template('displayitems.html', item_list=item_list)
Run Code Online (Sandbox Code Playgroud)

然后在displayitems.html我有:

{% for item in itemList%}
   <li class="list-group-item">
     <div class="item_number">{{ loop.index }}</div>
     <div class="item_name">{{ item }}</div>
   </li>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

其中列出了同一页面上的所有项目。但是,我想以某种方式在一个页面上拥有前 20 个项目,然后能够单击“下一步”按钮以查看另一个页面上的下一个 20 个项目,对列表中的所有项目依此类推. 有谁知道这样做的最佳方法?

Aja*_*234 5

首先,您需要创建一个分页对象以传递给包装的路由方法render_template

class PageResult:
   def __init__(self, data, page = 1, number = 20):
     self.__dict__ = dict(zip(['data', 'page', 'number'], [data, page, number]))
     self.full_listing = [self.data[i:i+number] for i in range(0, len(self.data), number)]
   def __iter__(self):
     for i in self.full_listing[self.page-1]:
       yield i
   def __repr__(self): #used for page linking
     return "/displayitems/{}".format(self.page+1) #view the next page

@app.route('/displayitems/<pagenum>')
def displayitems(pagenum):
  item_list = ['item1', 'item2', 'item3']
  return render_template('displayitems.html', listing = PageResult(item_list, pagenum))
Run Code Online (Sandbox Code Playgroud)

然后,在您的模板中,使用引导程序和当前列表创建分页:

<ul>
 {%for item in listing%}
   <li>{{item}}</li>
 {%endfor%}
</ul>

<ul class="pagination">
  {%if listing.page == 1%}
  <li class="page-item disabled"><a class="page-link" href="#">Previous</a></li>
  {%else%}
      <li class="page-item"><a class="page-link" href="/displayitems/{{listing.page-1}}">Previous</a></li>
   {%endif%}
  <li class="page-item"><a class="page-link" href="{{listing}}">Next</a></li>
</ul>

 
Run Code Online (Sandbox Code Playgroud)