Django:动态分页和变量paginate_by

时间:2017-10-27 23:18:05

标签: django pagination django-templates

在搜索解决方案后,我决定在这个问题上再问一个问题。 所以。条件:   - 类ListView有paginate_by = 12   - 在html-template中有下拉列表,其中有几个选项可以使用POST请求更改我的paginate_by - 一开始工作正常,页面上的对象更改次数和当前页数   - 显示分页链接我更喜欢使用来自https://www.tummy.com/articles/django-pagination/的食谱 - 必须进行更正,但显示指向不同页面的链接 问题:   - 在更改类ListView的paginat_by后,使用下拉列表,我移动到下一页,paginate_by返回第一个值= 12,当然返回页面上的前一个对象数和当然页数  ...顺便说一下 - 在第一个下拉列表中显示所选数字12,但是在更改值之后它会选择第一个值,即使我选择了最后一个值,并且页数根据最后一个值更改

我的问题:   - 每次呈现模板页面时,属性paginate_by是否都返回到第一个(12)值?有没有办法让它保持更长时间?   - 我想我可以使用GET请求来加密它,将它放在每个href中,但它不是来自tummy.com的当前链接配方的选项

如果有帮助的话。代码很少: 使用POST请求非常简单且有效地更改paginate_by属性

def post(self, request, *args, **kwargs):
    per_pages = request.POST.get('items_per_page')
    if per_pages:
        self.paginate_by = per_pages

    return super(FlatsList, self).get(request, *args, **kwargs)

下拉列表

<div class="items-per-page">
    <form action="." method="post" id="items_on_page">
        {% csrf_token %}
            <div class="sel form-group">
                <select id="items_per_page" name="items_per_page" 
                onchange="this.form.submit()">
                {% for item in per_page_options %}
                <option
                {% ifequal item paginate_by %}
                selected="selected"
                {% endifequal %}
                value="{{ item }}">{{ item }}</option>
                {% endfor %}
                </select>
            </div>
    </form>
</div>

其他网页链接的当前tempaltetag变种

<div class="col-md-12 clear">
    <div class="pull-right">
        <div class="pagination">
            <ul>
            {% if page_obj.has_previous %}
                <li><a href="?page={{ page_obj.previous_page_number }}">
                    <i class="fa fa-arrow-left fa-lg" aria-hidden="true">
                    </i> Ранее</a></li>
            {% endif %}

            {% if show_first %}
                <li><a href="?page=1">1</a></li>
                <span class="ellipsis">...</span>
            {% endif %}

            {% for linkpage in page_numbers %}
                {% ifequal page_obj.number linkpage %}
                <li class="active"><a>{{ page_obj.number }}</a></li>
                {% else %}
                <li><a href="?page={{ linkpage }}">{{ linkpage }}</a></li>
                {% endifequal %}
            {% endfor %}
            {% if show_last %}
                <span class="ellipsis">...</span>
                <li><a href="?page={{ paginator.num_pages }}">{{ 
             paginator.num_pages }}</a></li>
            {% endif %}
            {% if page_obj.has_next %}
                <li><a href="?page={{ page_obj.next_page_number }}">
                    Далее <i class="fa fa-arrow-right fa-lg" 
                    aria-hidden="true"></i></a></li>
            {% endif %}
            </ul>
        </div>
    </div>
</div>

有什么想法吗?

非常感谢。

0 个答案:

没有答案