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 个项目,对列表中的所有项目依此类推. 有谁知道这样做的最佳方法?
首先,您需要创建一个分页对象以传递给包装的路由方法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)
| 归档时间: |
|
| 查看次数: |
3410 次 |
| 最近记录: |