好的,这是第一次使用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 }}">«</a></li>
{% else %}
<li class="disabled"><span>«</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 }}">»</a></li>
{% else %}
<li class="disabled"><span>»</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
答案 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)