2016-01-20 72 views
2

我有這樣的代碼在我的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 

,並在我的模板博客/ 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

只有博客列表視圖知道如何處理您的搜索請求,所以您需要告訴表單將​​請求發送到該網址。您可以通過在表單中​​添加action屬性來完成此操作。例如,如果你的博客列表視圖可在/blog/,那麼你會怎麼做:

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

如果你命名的博客列表URL模式,那麼可以使用{% url %}標籤,以避免硬編碼的URL。例如,如果博客列表的url模式的名稱是blog_list,您應該這樣做:

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

謝謝!這工作!愚蠢的問題,但新手Django! – Aniket