Django 將資料輸出到html後,怎麼用?(QuerySet 和Set的區別?)
阿新 • • 發佈:2019-01-27
往html輸出的資料大部分是字典。字典的值有很多都是QuerySet。
既然這樣,我們首先應該認識認識Queryset。
"""
QuerySet is parametrized with model object
"""
class QuerySet(object):
def __init__(self, model=None, query=None, using=None, hints=None):
"""
:rtype: django.db.models.query.QuerySet[T]
"""
pass
def __iter__(self):
"""
:rtype: collections.Iterator[T]
"""
pass
class Set(set, MutableSet[T], extra=set):
def __new__(cls, *args, **kwds):
if _geqv(cls, Set):
raise TypeError("Type Set cannot be instantiated; "
"use set() instead" )
return set.__new__(cls, *args, **kwds)
從QuerySet 和 Set 原始碼可以看到,QuerySet並不是Set型別的子類。所以可以說二者沒有任何關係。那QuerySet到底是神馬? 繼續往下看。。。
Query_百度百科
Query,是查詢的意思,為了在資料庫中尋找某一特定檔案、網站、記錄或一系列記錄,由搜尋引擎或資料庫送出的訊息。簡介英文縮寫:Query查詢命令命令: query use…
QuerySet就是查詢集,查詢集對應的是SQL的Select…from…where…語句查詢出來元組。也可以這麼說,QuerySet = 元組+ORM技術
Set就是數學裡的集合,集合有什麼特點,set就有什麼特點。集合有無序性,set也有;集合有唯一性,set也有。
看吧,QuerySet和Set其實並沒有多大關係。有的是他倆確實有很多共同特徵(唯一性,無序性)。
QuerySet 如何使用? 遍歷一下就行了。
- QuerySet是查詢集,{物件1,物件2,物件3,物件4,,,,物件n}
- QuerySet = 元組 + ORM技術
使用方法:
從QuerySet中獲取物件可以通過for in 的形式遍歷,之後通過物件獲取物件的具體值。
# 這是在py中使用
categorys = Category.objects.filter(name__isnull=False)
args=dict()
for categ in categorys:
args[categ.name]=get_sorted_posts(categ)
# 這是在py中的使用方法。在html中類似,不過得用{%%}括起來,以證明這是python語句。
# 把'args':args['blogpostss'],傳給html。
# args['blogpostss'] = BlogPost.objects.exclude(title__in=exclude_posts)
def home(request, page=''):
args = dict()
# include 包括 exclude 不包括
args['blogpostss'] = BlogPost.objects.exclude(title__in=exclude_posts)
max_page = ceil(len(args['blogpostss']) / 3)
if page and int(page) < 2: # /0, /1 -> /
return redirect("/")
else:
page = int(page) if (page and int(page) > 0) else 1
args['page'] = page
args['prev_page'] = page + 1 if page < max_page else None
args['newer_page'] = page - 1 if page > 1 else None
args['sl'] = str(3 * (page - 1)) + ':' + str(3 * (page - 1) + 3)
# 用來展示分類資訊
categorys = Category.objects.filter(name__isnull=False)
cont ={
'args':args['blogpostss'],
'categorys':categorys,
}
return render(request, 'blog/index.html', cont)
# 這是html使用queryset。
{% for blogpost in args|slice:":3" %}
<!--這裡用來顯示標題 點選閱讀更多-->
<a href="{{ blogpost.get_absolute_url }}">
{{ blogpost.title }}</a>
{{ blogpost.pub_date|date:'M' }}{{blogpost.views}}{% endfor %}