Django中實現博客系統搜索功能

2019/12/3 ‏‎22:44:32

簡介

  1. 一個blog有搜索功能實在是再正常不過了,今天就來看看如何實現一個簡單的搜索功能。
  2. 搜索就是輸入關鍵詞搜索與標題相關的文章,先構思搜索功能的一般流程:前端一個輸入欄,一個搜索按鈕,輸入關鍵詞,提交;後端獲取關鍵詞,再數據庫中搜索標題中含有關鍵詞的標題,然後將搜索到的結果展示到前端。大致就是這樣的流程。

實現如下:


# 1. 搜索函數的實現:  

def search(request):
	q = request.GET.get('q')  # 獲取關搜索鍵詞
	contexts = Article.objects.all().order_by('-pub_date')[:5]  # 獲取最近五篇文章
	search_list = Article.objects.filter(title__icontains=q)  # 根據標題所含關鍵詞搜索
	error_msg = 'No result'
	return render(request, 'blog/search.html', {'search_list': search_list,
                                            'error_msg': error_msg,
                                            'contexts': contexts})

'q’是前端input標籤name屬性的名字,稍後再說。代碼第二行就是獲取前端輸入框裏關鍵字。第三、四行是在數據庫中查詢,第三行查詢所有文件,第四行查詢標題中包含關鍵詞的內容。有的文章中有判斷q是否爲空,其實完全沒有必要,在前端html代碼中會說明。


# 2. 數據模型的實現:

class Article(models.Model):  
    title = models.CharField(max_length=200)  
    category = models.CharField(max_length=100, default='')  # 文章分類
	body = MDTextField()
	pub_date = models.DateTimeField('datepublished',default=timezone.now)

	def __str__(self):  
    	return self.title 

模型中創建的幾個字段,標題,分類,主體內容,發佈時間。


# 3. 前端html實現:  

<form method="get" action="{% url 'blog:search' %}">
	{% csrf_token %}
    <input class="txt" type="search" name="q" placeholder="Search" required>
    <button type="submit" value="Search">Search</button>
</form>

注意到input標籤中name的值q與搜索方法中的q相同,還有一個required,這個值說明輸入該不能爲空,有個這個值,後端的搜索方法中就不需要判斷q是否爲空。action設置url。


# 4. url的實現:  
path('search/', views.search, name='search'),

# 5. 最後是獲取的文章展示:  

{% if search_list %}
    {% for search in search_list %}
		{{ search }}
	{% endfor %}
{% else %}
	{{ error_msg }}
{% endif %}

搜索文章展示內容還需要一些css優化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章