如何在Flask的多个页面上显示列表?(How to display a list across multiple pages in Flask?)

编程入门 行业动态 更新时间:2024-10-21 03:45:40
如何在Flask的多个页面上显示列表?(How to display a list across multiple pages in 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)

然后在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 %}

其中列出了同一页面上的所有项目。 但是,我想以某种方式拥有一页上的前20项,然后可以单击“下一步”按钮来查看另一页上的下20项,以此类推对于列表中的所有项目。 有没有人知道这样做的最好方法?

In Flask, I am trying to display a dynamic list of items across multiple pages. The size of the list can possibly reach over 1000.

In app.py I have a route such as:

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

Then in displayitems.html i have:

{% for item in itemList%} <li class="list-group-item"> <div class="item_number">{{ loop.index }}</div> <div class="item_name">{{ item }}</div> </li> {% endfor %}

Which lists all items on the same page. However, I would like to somehow have, say, the first 20 items on one page, then be able to click a "next" button to view the next 20 items on another page, and so on for all of the items in the list. Does anyone know the best way to go about doing this?

最满意答案

首先,你需要创建一个pagenation对象传递给包装的路由方法的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))

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

<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>

First, you will want to create a pagenation object to pass to the wrapped route method's 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))

Then, in your template, create the pagination with bootstrap and current listing:

<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>

更多推荐

本文发布于:2023-07-23 02:35:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1226513.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多个   页面   列表   如何在   Flask

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!