2026年01月06日
在實作部落格文章列表時,「搜尋功能」幾乎是一定會遇到的需求。 看似只有幾行的 Django ORM,其實背後藏了不少設計細節。 這篇文章會完整說明: - 為什麼要先判斷 `if search_query` - `request.GET.get('q', '')` 的設計用意 - `icontains` 在 ORM 中的實際行為 - 使用 OR(`|`)合併查詢的意義 - 常見不良寫法與推薦改法 --- ## 一、實際範例程式碼 ```python # 取得搜尋關鍵字 search_query = request.GET.get('q', '') # 取得所有文章 articles = Article.objects.all() # 如果有搜尋關鍵字,過濾文章 if search_query: articles = articles.filter( title__icontains=search_query ) | articles.filter( content__icontains=search_query …