想在主頁上添加一個搜索欄,來進行內(nèi)容的搜索,看了網(wǎng)上一些文章,主要有兩種
1:利用Django本身數(shù)據(jù)模型帶的搜索功能,實現(xiàn)比較基礎(chǔ)的搜索
2:利用第三方包來實現(xiàn)比較高級的搜索功能
今天先來做一下基礎(chǔ)的搜索功能
1: 案例與界面
打個比方,我們一般搜索帶文章的網(wǎng)站,都是搜索帶“目標內(nèi)容”的標題或者含有“目標內(nèi)容”的文章
首先在主頁上創(chuàng)建一個搜索表單
<form role="search" class="col" action="{% url 'mainsite:search' %}" method="get">
{% csrf_token %}
<input type="search" placeholder="請輸入想要搜索的內(nèi)容" name="search_info">
<button class="" type="submit">搜索</button>
</form>
這里需要注意的唯一一個地方就是,input標簽里面的name,這個將會作為request一對key,value一同傳入。

效果圖
2:views視圖函數(shù)
接下來需要我們定義怎么去搜索內(nèi)容
def search(request):
search_info = request.GET.get('search_info')
error_msg=""
if not search_info:
error_msg = "您需要輸入想要搜索的內(nèi)容"
return render(request,'search_result.html',locals())
search_result = Article.objects.filter(article_title__icontains=search_info)
return render(request,'search_result.html',locals())
主要的邏輯就是,通過request的GET提取出search_info的內(nèi)容,也就是我們搜索的內(nèi)容。
如果沒有搜索內(nèi)容只是點擊了搜索,會提示錯誤信息。
反之則看你搜索的內(nèi)容,有多少文章的標題內(nèi)含有該內(nèi)容。
3: 回到前端渲染
然后我們來看一下如何渲染搜索出來的結(jié)果
{% if error_msg %}
{{ error_msg }}
{% endif %}
<div class="container">
{% for sr in search_result %}
<li>{{sr.article_title}}</li>
{% empty %}
<h3>沒搜索到</h3>
{% endfor %}
</div>
如果沒有搜索到結(jié)果,則會提示"沒搜索到"

進行搜索

搜索結(jié)果
這樣,最簡單的搜索功能就完成了。
當(dāng)然,還可以引入Q查詢來進行多條件查詢,這個可以看django的文檔.
參考資料:https://www.zmrenwu.com/courses/django-blog-tutorial/materials/26/