私はdjangoのデフォルトのページネーションを使用していますが、私はその効率について懸念しています。私は3000+オブジェクトをデータベースに保存していて、15ページずつ表示しています。より効率的に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})
私は私のワードリストを持っているようにです:私のコードであるだけDjango.Hereのドキュメントに与えられたコードのようなものです私はviews.pyで私views.Myコードで再びデータベースのクエリを実行しているように思えます初めての準備はできましたが、別のページをリクエストするときに何度も何度もやり直さなければなりません。これを行うための効率的な方法はありますか?
システムがあなたのデシベル毎回に当たらないようにするには理想的Word.objects.all()
の結果をキャッシュする必要がありThanks.G
どのようにループをmimeと比較しますか?それはall_wordsのための 'のための単語ですか: taged_word = FlagWord.objects.filter(word = word、user = user)'広範な部分ですか?結果をキャッシュする方法も? – Gnijuohz
ループは、テーブルの各単語を、FlagWordのリンクされたオブジェクトに対して、DBからフェッチすることによってチェックします。 Mineはその逆を行い、リンクされたFlagWordsを持つ単語だけを検索し、SQLレベルで他の単語をフィルタリングします。 キャッシングについては、[キャッシングのドキュメント](https://docs.djangoproject.com/en/dev/topics/cache/)を参照してください。あなたはおそらく[ビューキャッシュごと](https://docs.djangoproject.com/en/dev/topics/cache/#the-perview-cache) –
hahaを使用したいと思うでしょう。少し)、スピードがたくさん断食されていることがわかりました!うわー、アルゴリズムは本当に重要です。 – Gnijuohz