如何在所有页面中提供我的搜索功能?

时间:2016-01-20 11:27:35

标签: python django django-models

我在views.py中有这段代码

class BlogListView(ListView):
    model = Blog
    template_name = "blog/blog_list.html"
    paginate_by = 5
    queryset = Blog.objects.order_by('-created_on')

    def get_context_data(self,*args,**kwargs):
        context = super(BlogListView,self).get_context_data(*args,**kwargs)
        #filters = Blog.objects.order_by('-created_on')
        #context["filters"] = filters
        #context ['categories'] = Category.objects.all()
        return context
    def get_queryset(self,*args,**kwargs):
        qs = super(BlogListView,self).get_queryset(*args,**kwargs)
        query = self.request.GET.get("q")
        if query:
            qs=self.model.objects.filter(
                Q(title__icontains=query)
                )
        return qs

并在我的模板blog / base.html

<form class="navbar-form navbar-right" method="GET" role="search">
     <div class="form-group">
        <input type="text" class="form-control" placeholder="Search" name="q"/>
      </div>
</form>

它仅适用于一个blog_list.html页面!如何在所有模板页面中访问我的搜索功能?

1 个答案:

答案 0 :(得分:1)

只有博客列表视图知道如何处理您的搜索请求,因此您需要告知表单将请求发送到该网址。您可以通过向表单添加action属性来执行此操作。例如,如果您的博客列表视图位于/blog/,那么您可以执行以下操作:

<form class="navbar-form navbar-right" method="GET" action="/blog/" role="search">

如果您已命名博客列表网址模式,则可以使用{% url %}标记,以避免对网址进行硬编码。例如,如果博客列表网址格式的名称为blog_list,您可以执行以下操作:

<form class="navbar-form navbar-right" method="GET" action="{% url 'blog_list' %}" role="search">