django 前端頁面如何實現顯示前N條資料
這個涉及到的知識點是django資料庫查詢問題,我們可以在view.py檔案中操作
blog_list = models.Blog.objects.all()[:3]
這是選取資料庫的前三條資料
補充知識:django 資料庫查詢—如何獲取指定範圍的資料
檢索物件
__exact 精確等於 like ‘aaa'
__iexact 精確等於 忽略大小寫 ilike ‘aaa'
__contains 包含 like ‘%aaa%'
__icontains 包含 忽略大小寫 ilike ‘%aaa%',但是對於sqlite來說,contains的作用效果等同於icontains。
__gt 大於__gte 大於等於
__lt 小於
__lte 小於等於
__in 存在於一個list範圍內
__startswith 以…開頭
__istartswith 以…開頭 忽略大小寫
__endswith 以…結尾
__iendswith 以…結尾,忽略大小寫
__range 在…範圍內
__year 日期欄位的年份
__month 日期欄位的月份
__day 日期欄位的日
__isnull=True/False
__isnull=True 與 __exact=None的區別
1、檢索所有的物件
>>> all_entries = Entry.objects.all()
使用all()方法返回資料庫中的所有物件。
2、檢索特定的物件
使用以下兩個方法:
fileter(**kwargs)
返回一個與引數匹配的QuerySet,相當於等於(=).
exclude(**kwargs)
返回一個與引數不匹配的QuerySet,相當於不等於(!=)。
Entry.objects.filter(pub_date__year=2006)
不使用Entry.objects.all().filter(pub_date__year=2006),雖然也能執行,all()最好再獲取所有的物件時使用。
上面的例子等同於的sql語句:
select * from entry where pub_date_year='2006′
連結過濾器:
>>> Entry.objects.filter( … headline__startswith='What' … ).exclude( … pub_date__gte=datetime.now() … ).filter( … pub_date__gte=datetime(2005,1,1) … )
最後返回的QuerySet是headline like ‘What%' and put_date2005-01-01
另外一種方法:
>> q1 = Entry.objects.filter(headline__startswith=”What”) >> q2 = q1.exclude(pub_date__gte=datetime.now()) >> q3 = q1.filter(pub_date__gte=datetime.now())
這種方法的好處是可以對q1進行重用。
QuerySet是延遲載入
只在使用的時候才會去訪問資料庫,如下:
>>> q = Entry.objects.filter(headline__startswith=”What”) >>> q = q.filter(pub_date__lte=datetime.now()) >>> q = q.exclude(body_text__icontains=”food”) >>> print q
在print q時才會訪問資料庫。
其他的QuerySet方法
>>> Entry.objects.all()[:5]
這是查詢前5個entry表裡的資料
>>> Entry.objects.all()[5:10]
這是查詢從第5個到第10個之間的資料。
>>> Entry.objects.all()[:10:2]
這是查詢從第0個開始到第10個,步長為2的資料。
>>> Entry.objects.order_by(‘headline')[0]
這是取按headline欄位排序後的第一個物件。
>>> Entry.objects.order_by(‘headline')[0:1].get()
這和上面的等同的。
>>> Entry.objects.filter(pub_date__lte='2006-01-01′)
等同於SELECT * FROM blog_entry WHERE pub_date <= '2006-01-01′;
>>> Entry.objects.get(headline__exact=”Man bites dog”)
等同於SELECT … WHERE headline = ‘Man bites dog';
>>> Blog.objects.get(id__exact=14) # Explicit form >>> Blog.objects.get(id=14) # __exact is implied
這兩種方式是等同的,都是查詢id=14的物件。
>>> Blog.objects.get(name__iexact=”beatles blog”)
查詢name=”beatles blog”的物件,不去飯大小寫。
Entry.objects.get(headline__contains='Lennon')
等同於SELECT … WHERE headline LIKE ‘%Lennon%';
startswith 等同於sql語句中的 name like ‘Lennon%',
endswith等同於sql語句中的 name like ‘%Lennon'.
>>> Entry.objects.filter(blog__name__exact='Beatles Blog')
查詢entry表中外來鍵關係blog_name='Beatles Blog'的Entry物件。
>>> Blog.objects.filter(entry__headline__contains='Lennon')
查詢blog表中外來鍵關係entry表中的headline欄位中包含Lennon的blog資料。
Blog.objects.filter(entry__author__name='Lennon')
查詢blog表中外來鍵關係entry表中的author欄位中包含Lennon的blog資料。
Blog.objects.filter(entry__author__name__isnull=True) Blog.objects.filter(entry__author__isnull=False,entry__author__name__isnull=True)
查詢的是author_name為null的值
Blog.objects.filter(entry__headline__contains='Lennon',entry__pub_date__year=2008) Blog.objects.filter(entry__headline__contains='Lennon').filter( entry__pub_date__year=2008)
這兩種查詢在某些情況下是相同的,某些情況下是不同的。第一種是限制所有的blog資料的,而第二種情況則是第一個filter是
限制blog的,而第二個filter則是限制entry的
>>> Blog.objects.get(id__exact=14) # Explicit form >>> Blog.objects.get(id=14) # __exact is implied >>> Blog.objects.get(pk=14) # pk implies id__exact
等同於select * from where id=14
Get blogs entries with id 1,4 and 7 >>> Blog.objects.filter(pk__in=[1,4,7])
等同於select * from where id in{1,7}
Get all blog entries with id > 14 Blog.objects.filter(pk__gt=14)
以上這篇django 前端頁面如何實現顯示前N條資料就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。