如何将我的搜索功能放在所有页面中?
问题描述:
我有这样的代码在我的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页面!我如何在所有模板页面上访问我的搜索功能?
答
只有博客列表视图知道如何处理您的搜索请求,所以您需要告诉表单将请求发送到该网址。您可以通过在表单中添加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">
谢谢!这工作!愚蠢的问题,但新手Django! – Aniket