在 Django 中添加 ?q=search+term url

Add ?q=search+term in django url

我想将 elastic search 与 django 集成,但首先我需要在 url

中获得一个好的参数
http://127.0.0.1:8000/search?q=search+term

urls.py(观点)

urlpatterns = [
    path('?q=', SearchIndexView.as_view(), name="search-index"),
]

urls.py(应用程序)

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('home.urls')),
    path('u/', include('user.urls')),
    path('search', include('search.urls')),
]

这就是我目前所拥有的,但我不知道如何让它发挥作用。 如果可能的话,我想使用 path() 而不是 url()

保持你的url这样

urlpatterns = [
    path('', SearchIndexView.as_view(), name="search-index"),
]

采用 html 形式

<form method='GET'>

并在 input put name="q"

您不需要在 urls.py 中定义 url query strings。您可以像这样保留 url:

path('', SearchIndexView.as_view(), name="search-index"),

SearchIndexView中你可以这样做:

q = request.GET.get('q')

HTML 表格

<form action="{%url 'search' %}"  method="get">
   <input type="text" name="q" placeholder="Search...">
   <button  type="submit"></button>
</form>

网址

path('search/',views.search,name='search')

观看次数

def search(request):
    query = request.GET.get('q')
    if query:
      print("do your stuff here")

在 Django 通用视图中,您可以按如下方式为模型博客创建搜索视图

class SearchResultView(ClientMixin, TemplateView):
template_name = 'clienttemplates/clientsearchresult.html'

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    query = self.request.GET.get('q')
    if query:
        lookup = Q(title__icontains=query)
        search_list = Blog.objects.filter(lookup)
        context["slist"] = searchlist
    return context

in html 只需将 name='q' 放入输入标签

<input type="text" class="search-field " placeholder="Search Blog..." value="" name='q'>

在urls.py

path('search/result', SearchResultView.as_view(), name="searchresult"),

在 clientsearchresult.html 中,您只需添加

 {% if slist %}

             {% for blog in slist %}
               {{blog.title|title}}
               {{bog.content|safe}}
               {% endfor %}... and so on 
               {% endif %}