5大,我按照课程第九章第一课14:48秒的步骤,完成了
class IndexView(BasePostView):
def get_queryset(self):
query = self.request.GET.get('query')
qs = super(IndexView, self).get_queryset()
if not query:
return qs
return qs.filter(title__icontains=query) # select * from blog_post where title ilike '%query%'
def get_context_data(self, **kwargs):
query = self.request.GET.get('query')
return super(IndexView,self).get_context_data(query=query)
同时前端也完成了分页加上query请求字段的逻辑
{% if page_obj.has_next %}
{% if query %}
<a href="?page={{ page_obj.next_page_number }}&query={{ query }}">下一页</a>
{% else %}
<a href="?page={{ page_obj.next_page_number }}">下一页</a>
{% endif %}
{% endif %}
但是我发现query字段并没有传过去,在view.py中加入pdb测试
def get_context_data(self, **kwargs):
query = self.request.GET.get('query')
import pdb;pdb.set_trace()
qs = super(IndexView,self).get_context_data(query=query)
return super(IndexView,self).get_context_data(query=query)
我的查询字段是l,生成结果如下,posts处符合有l文章的预期结果
(Pdb) qs
{u'paginator': <django.core.paginator.Paginator object at 0x000000000487BF28>, u'object_list': <QuerySet [<Post: Hello World>, <Post: Linux教程>, <Post: linux>]>, u'posts': <QuerySet [<Post: Hello World>, <Post: Linux教程>, <Post: linux>]>, u'recent_comments': <QuerySet [<Comment: Comment object>, <Comment: Comment object>, <Comment: Comment object>, <Comment: Comment object>]>, u'side_bars': <QuerySet [<SideBar: SideBar object>, <SideBar: SideBar object>, <SideBar: SideBar object>]>, u'page_obj': <Page 1 of 2>, u'cates': [<Category: 日常>], u'recent_posts': <QuerySet [<Post: Hello World>, <Post: Linux教程>, <Post: 3>, <Post: 4>, <Post: 5>, <Post: 6>, <Post: 7>, <Post: 8>, <Post: 9>, <Post: linux>]>, u'view': <blog.views.IndexView object at 0x0000000004770198>, u'is_paginated': True, u'nav_cates': [<Category: Django>, <Category: Linux>]}
我觉得应该是拿到了,想问下为啥这里query返回给前端后,我测试下来是不存在的,如图所示,想问下5大问题出在哪里了,想了好久。