为了解决这个问题,我刚刚修改了分页HTML,以容纳来自表单的get请求和url字符串中的页码,如下所示:
<div class="pagination">
<span class="page-links">
{% if page_obj.has_prevIoUs %}
<a href="/browse/?browse={{ input }}&page={{ page_obj.prevIoUs_page_number }}">prevIoUs</a>
{% endif %}
<span class="page-current">
Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
</span>
{% if page_obj.has_next %}
<a href="/browse/?browse={{ input }}&page={{ page_obj.next_page_number }}">next</a>
{% endif %}
</span>
</div>
这里的{{input}}是一个字符串,其中包含通过表单提交的选项,例如“ Cats”或“ Worms”。
为了能够将其传递到模板中,我对基于类的视图的get_context_data方法进行了如下修改:
class Browse(generic.ListView):
template_name = 'app/browse.html'
paginate_by = 25
# Modifying the get_context_data method
def get_context_data(self, **kwargs):
context = super(Browse, self).get_context_data(**kwargs)
q = self.request.GET.get("browse")
context['input'] = q
return context
def get_queryset(self):
queryset = Cats.objects.all()
if self.request.GET.get("browse"):
selection = self.request.GET.get("browse")
if selection == "Cats":
queryset = Cats.objects.all()
elif selection == "Dogs":
queryset = Dogs.objects.all()
elif selection == "Worms":
queryset = Worms.objects.all()
else:
queryset = Cats.objects.all()
return queryset
就是这样,URL字符串现在显示为:
/browse/?browse=Cats&page=3