0
我使用的是Django的默認分頁,但我很關心它的efficiency.I都存儲在我的數據庫3000+對象和我顯示15每page.So我每次去到下一個頁面在我看來,我在views.py我views.My代碼再做數據庫查詢就像在Django.Here的文檔中給出的代碼是我的代碼:怎麼做的Django分頁更有效地
all_words=Word.objects.all()
user=request.user
wordlist = []
for word in all_words:
taged_word = FlagWord.objects.filter(word = word,user = user)
if taged_word :
usertag = True
else:
usertag = False
wordlist.append({'word':word,'usertag':usertag})
number = Word.objects.count()
paginator = Paginator(wordlist,15)
try:
page = int(request.GET.get('page','1'))
except ValueError:
page = 1
try:
listpage = paginator.page(page)
except (EmptyPage,InvaildPage):
listpage = paginator.page(paginator.num_pages)
return render_to_response('GRETemplate/wordbank.html',{'words':listpage,'user':user,'number':number})
這就像我有我的單詞表第一次準備好了,但是當我要求另一個頁面時,我必須一遍又一遍地做它。是否有更有效的方法來做到這一點?
Thanks.G
你怎麼比較你的啞劇循環?它是否是all_words中的詞: taged_word = FlagWord.objects.filter(word = word,user = user)'部分是否可擴展?還有如何緩存結果? – Gnijuohz 2012-03-04 09:19:51
您的循環通過從數據庫中提取它來檢查表中的每個單詞與FlagWord中的鏈接對象。 Mine做相反的事情,它只搜索那些有任何鏈接的FlagWords的單詞,然後在SQL級別過濾其他單詞。 用於高速緩存,請參見[緩存文檔】(https://docs.djangoproject.com/en/dev/topics/cache/)。你可能會想[每視圖緩存](https://docs.djangoproject.com/en/dev/topics/cache/#the-per-view-cache) – 2012-03-04 09:42:19
哈哈。我用你的方法(只改變了一個小),並發現禁食的速度很快!哇,算法真的很重要。很多謝謝。 – Gnijuohz 2012-03-04 12:40:19