Django 分页 , 只显示最近的页数( 只显示靠近的页数, 最多显示n页 )
我不知道怎么说, 但是这个标题你在搜索引擎搜的时候应该能搜到
其实我前不久看到过更简单更直接的方法, 但是当时没做笔记, 然后后面找不到了, 现在很后悔,
我是使用Template的(基本可以实现大部分逻辑)
views.py
# (ListView)
def get_context_data(self, **kwargs):
context_data = super().get_context_data(**kwargs)
context_data['max_left_item_count'] = '2'
return context_data
templates
{% if is_paginated %}
<nav aria-label="Page navigation ">
<ul class="pagination justify-content-end">
{% if page_obj.has_previous %}
{% if page_obj.number >= max_left_item_count|add:max_left_item_count %}
<li class="page-item"><a class="page-link" href="?page=1">««</a></li>
{% endif %}
<li class="page-item"><a class="page-link" href="?page={{ page_obj.previous_page_number }}">«</a></li>
{% endif %}
{% for i in page_obj.paginator.page_range %}
{% if page_obj.number == i %}
<li class="page-item active">
<span class="page-link" >{{ i }} <span class="sr-only page-link">(current)</span></span>
</li>
{% elif page_obj.number|add:max_left_item_count >= i and i|add:max_left_item_count >= page_obj.number %}
<li class="page-item"><a class="page-link" href="?page={{ i }}">{{ i }}</a></li>
{% endif %}
{% endfor %}
{% if page_obj.has_next %}
<li class=" page-item"><a class="page-link" href="?page={{ page_obj.next_page_number }}">»</a></li>
{% if page_obj.paginator.num_pages > page_obj.number|add:max_left_item_count %}
<li class=" page-item"><a class="page-link" href="?page={{ page_obj.paginator.num_pages }}">»»</a></li>
{% endif %}
{% endif %}
</ul>
</nav>
<span class="float-right">
{{ page_obj.number }} / {{ page_obj.paginator.num_pages }}
</span>
{% endif %}
顺便给大家分享一下存储函数
import hashlib
from django.core.files.storage import FileSystemStorage
class FunFileStorage(FileSystemStorage):
def _save(self, name, content):
sha256 = hashlib.sha256()
for chunk in content.chunks():
sha256.update(chunk)
name = sha256.hexdigest()
full_path = super().path(name)
# 这里大约能给你节约 0.1% 的磁盘空间, 别问我怎么知道
if( os.path.exists( full_path )):
return name
return super()._save(name, content)
settings.py
DEFAULT_FILE_STORAGE = 'xxx.xxx.FunFileStorage'
我在念大学, 一元 五角 一分 都可以, 真心感谢, 谢谢, 谢谢