您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Django ListView自定义查询集

Django ListView自定义查询集

为了解决这个问题,我刚刚修改分页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

这样就可以了,分页现在可以与表单的get方法一起使用。

Go 2022/1/1 18:50:48 有308人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶