django的动态分页

时间:2017-10-25 21:05:32

标签: python django pagination

好的,这是第一次使用Django的分页,我试图阻止它在每个页面转弯时重新加载我的视图。

我正在这样的视图中处理分页:

{% if data.has_other_pages %}
    <div id='page-slide'>
        <ul class="pagination" start='$offset'>
            {% if data.has_previous %}
                <li><a href="?page={{ data.previous_page_number }}">&laquo;</a></li>
            {% else %}
                <li class="disabled"><span>&laquo;</span></li>
            {% endif %}
            {% for i in data.paginator.page_range %}
                {% if data.number == i %}
                    <li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
                {% else %}
                    <li><a href="?page={{ i }}">{{ i }}</a></li>
                {% endif %}
            {% endfor %}
            {% if data.has_next %}
                <li><a href="?page={{ data.next_page_number }}">&raquo;</a></li>
            {% else %}
                <li class="disabled"><span>&raquo;</span></li>
            {% endif %}
        </ul>
    </div>
{% endif %} 

并且分页在html中处理:

<form action="{% url 'results-view' %}" method="POST" class="autocomplete-me ui-widget" id="myform" >
    {% csrf_token %}

    <div class="ui-widget" style="text-align:center;">
        <input type="text" id="id_q" name="q" placeholder="{{ search_phrase }}">
        <br></br>
        <div style="text-align:center;" id='adjust-button'>
            <input type='submit' class='btn btn-secondary btn-lg' id ='search-btn' value='Search'/>         
            <a class='btn btn-secondary btn-lg' id ='clear-btn' href="{% url 'inital' %}">Clear</a>
        </div>
    </div>
</form>

我遇到的问题是,每当我切换到另一个页面时,我的整个视图将再次运行,数据将不会反映原始搜索查询,而是默认为空查询。

我想知道是否有一种简单的方法可以动态处理分页,或者在页面之间切换时阻止页面重新加载?

感谢任何帮助,谢谢。

更新搜索表单:

return coins

2 个答案:

答案 0 :(得分:2)

您在评论中注意到,您的搜索值为instanceValuesString = request.POST.get(u"q").encode('utf-8').strip()。正如一位评论者正确指出的那样,这意味着当您单击“下一页”链接(发出GET请求)时,您的视图不会收到返回搜索结果所需的信息。

解决此问题的一种方法是从instanceValuesString请求而不是GET请求中获取POST。例如,您的列表视图可能位于

http://example.com/StuffList

您可以查找提供search查询字符串的网址:

http://example.com/StuffList?search=goodstuff

然后在你看来抓住它:

instanceValuesString = request.GET.get('search', None)
if instanceValuesString is not None:
    #you have detected a search query; filter results, process request, etc.

此处的一个副作用是,您当前构建下一页/上一页网址的方式将会中断。考虑示例搜索URL;您当前的模板将构建第2页的链接,如下所示:

http://example.com/StuffList?search=goodstuff?page=2

这不起作用;它应该是&page=2。幸运的是,这是一个简单的解决方案;看看这个问题的第二个答案:Altering one query parameter in a url (Django)。使用url_replace而不是使用基本url模板标记构建这些链接将解决此问题的这一部分。

答案 1 :(得分:0)

相关问题