【问题标题】:Django template large data pagination link issueDjango模板大数据分页链接问题
【发布时间】:2021-06-16 14:04:48
【问题描述】:

我在我的模板中使用 django 分页器。它在数据较少的情况下工作正常,但在页面数量很大时效果不佳。

分页链接代码如下:

<div class="paginationWrapper mt-3">
        {% if match_list.paginator.num_pages > 1 %}
        <ul class="pagination">
            {% if match_list.has_previous %}
            <li>
                <a href="?p={{ match_list.previous_page_number }}
                    {% if request.GET.search %}&search={{ request.GET.search }}
                    {% endif %}" class="page-link"><i class="fas fa-angle-double-left"></i></a>
            </li>
            {% endif %}
            {% for j in match_list.paginator.page_range %}
            {% if match_list.number == j %}
            <li class="active"><a class="page-link" href="#">{{ j }}</a></li>
            {% else %}
            <li><a href="?p={{ j }}{% if request.GET.search %}&search={{ request.GET.search }}
                    {% endif %}" class="page-link">{{ j }}</a></li>

            {% endif %}
            {% endfor %}

            {% if match_list.has_next %}
            <li>
                <a href="?p={{ match_list.next_page_number }}  
                {% if request.GET.search %}&search={{ request.GET.search }}{% endif %}            
                    " class="page-link"><i class="fas fa-angle-double-right"></i></a>
            </li>
            {% endif %}
        </ul>
        {% endif %}
    </div>

在此之后,我开始在我的模板中添加链接,例如:

我真正想要的是在那之后我只想显示 10 个链接......为了显示更多,任何人都可以帮我解决这个问题,我被困在这里

【问题讨论】:

    标签: django django-templates pagination django-pagination


    【解决方案1】:

    https://docs.djangoproject.com/en/3.1/topics/pagination/#paginating-a-listview

    试试这个

    {% load core %}   // core here is template tag
    {% if match_list.paginator.num_pages > 1 %}
            <ul class="pagination justify-content-center">
                {% if match_list.has_previous %}
                    <li class="page-item">
                        <a class="page-link" href="?{% param_replace page=1 %}">
                            First
                        </a>
                    </li>
                {% else %}
                    <li class="page-item disabled">
                        <a class="page-link" href="#">
                            First
                        </a>
                    </li>
                {% endif %}
                {% if match_list.has_previous %}
                    <li class="page-item">
                        <a class="page-link" href="?{% param_replace page=match_list.previous_page_number %}">
                            &laquo;
                        </a>
                    </li>
                {% else %}
                    <li class="page-item disabled">
                        <a class="page-link" href="#">
                            &laquo;
                        </a>
                    </li>
                {% endif %}
                {% for i in match_list.paginator.page_range %}
                    {% if match_list.number == i %}
                        <li class="page-item active">
                            <a class="page-link" href="#">{{ i }} <span class="sr-only">(current)</span>
                            </a>
                        </li>
                    {% elif match_list.number > i|add:"-5" and match_list.number < i|add:"+5"%}
                        <li class="page-item"><a class="page-link" href="?{% param_replace page=i %}">{{ i }}</a></li>
                    {% endif %}
                {% endfor %}
                {% if match_list.has_next %}
                    <li class="page-item">
                        <a class="page-link" href="?{% param_replace page=match_list.next_page_number %}">
                            &raquo;
                        </a>
                    </li>
                {% else %}
                    <li class="page-item disabled">
                        <a class="page-link" href="#">
                            &raquo;
                        </a>
                    </li>
                {% endif %}
                {% if match_list.paginator.num_pages != match_list.number %}
                    <li class="page-item">
                        <a class="page-link" href="?{% param_replace page=match_list.paginator.num_pages %}">
                            Last
                        </a>
                    </li>
                {% else %}
                    <li class="page-item disabled"><a class="page-link" href="#">Last</a></li>
                {% endif %}
            </ul>
    {% endif %}
    

    自定义模板标签

    @register.simple_tag(takes_context=True)
    def param_replace(context, **kwargs):
        """
      
        """
        d = context['request'].GET.copy()
        for k, v in kwargs.items():
            d[k] = v
        for k in [k for k, v in d.items() if not v]:
            del d[k]
        return d.urlencode()
    

    输出

    【讨论】:

    • 不工作错误:第 77 行的块标记无效:“param_replace”,预期为“elif”、“else”或“endif”。您是否忘记注册或加载此标签?还有一件事你不能编辑我的设计吗?因为我不想在设计上妥协
    • 这不是我的坏事。你能用你的逻辑更新我的html代码吗?因为我只需要那个设计,并且我在 url 中将查询字符串作为 p 传递。请根据您的条件更新我的 html
    • @Pankhuri 你可以试试这个stackoverflow.com/a/46329564/5600452
    • 我之前尝试过的相同,但这不适用于我的设计帮助我@c.grey 我真的被困在这里
    • 感谢@c.grey 现在可以正常工作了,非常感谢
    猜你喜欢
    • 1970-01-01
    • 2011-06-28
    • 2015-12-19
    • 1970-01-01
    • 2011-10-24
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多