2016-01-20 3 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

Только просмотр списка блога знает, как обрабатывать ваш запрос на поиск, поэтому вам нужно сообщить форме, чтобы отправить запрос на этот URL-адрес. Вы делаете это, добавляя к форме атрибут 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

Спасибо! Это сработало! Глупый вопрос, но новичок в джанго! – Aniket

Смежные вопросы