1. 程式人生 > >django實現搜索功能

django實現搜索功能

形式 blank 輸入關鍵詞 default 輸入 fault ins form orf

實現功能:用戶在搜索框輸入關鍵詞,過濾出帶有關鍵詞的文章。

新聞模型如下:

models.py

class Notices(models.Model):
    Category_List = ((‘新聞動態‘, ‘新聞動態‘), (‘通知公告‘, ‘通知公告‘),)
    NoticeID=models.AutoField(primary_key=True)
    NoticeTitle=models.CharField(‘新聞標題‘,max_length=50)
    NoticeContent = UEditorField(u‘內容    ‘, width=800, height=300, toolbars="full", imagePath="images/",filePath="files/",default=‘‘)
    NoticeData=models.DateField(‘時間‘,auto_now_add=True)
    NoticeDesc=models.CharField(‘新聞描述‘,max_length=50,blank=True)  #新聞描述
    NoticeUser=models.CharField(‘發布人‘,max_length=50,blank=True)#發布人
    #NoticeCategory = models.CharField(‘新聞分類‘,default=‘‘, max_length=10)  # 新聞分類
    NoticeCategory=models.CharField(‘新聞分類‘,choices=Category_List,default=1,max_length=10) #新聞分類
    class Meta:
        #結果集按照何種方式排序
        #ordering=[‘-time_added‘]
        #在數據庫中的表名
        db_table = "std_web_notices"
        #對象的名稱
        verbose_name = "新聞"
        #對象復數形式的名稱
        verbose_name_plural = verbose_name

    def __unicode__(self):
        return self.title

 在前端html表單進行修改:

<form role="search" method="get" id="searchform" action="{% url ‘std_web:xwdt_search‘ %}">
  {% csrf_token %}          
  <input type="search" name="q" placeholder="標題過濾" required>        
  <button type="submit">搜索</button>

 {%csrf_token%}是django用來防禦跨站請求偽造的機制。

從前端代碼看到使用get方法,當用戶提交搜索後,通過action找到相應的url進行跳轉。

定義視圖函數

views.py

def xwdt_search(request):
    q=request.GET.get(‘q‘)
    error_msg= ‘‘
    if not q:
        error_msg=‘請輸入關鍵詞‘
        return render(request,‘jsyw/xwdt.html‘,{‘error_msg‘:error_msg})
    post_list=Notices.objects.filter(NoticeTitle__icontains=q)
    return render(request, ‘jsyw/xwdt.html‘, {‘error_msg‘: error_msg,‘post_list‘:post_list})

q為查詢框的name

這裏的查詢條件NoticeTitle__icontains=q是指NoticeTitle包含q

綁定URL

url(r‘^xwdt_search/‘,views.xwdt_search,name=‘xwdt_search‘),

  

django實現搜索功能