django アプリとして小さなブログ スクリプトを作成しました。単一の記事ビューでは、多くのリクエストが必要だと思います。しかし、私はそれらを減らす方法がわかりません。
1 つのクエリですべてのブログ投稿を取得します。その結果、クエリセットを取得します。これで、さらにいくつかのアクションを実行します。しかし、すべてのアクションで、django デバッガーのツールバーは、データベースに何度もヒットすることを教えてくれます。
ビューは次のとおりです。
def single(request, slug):
articles = Article.objects.all()
article = articles.filter(slug=slug)[0]
newer_article = list(articles.filter(release_date__gt=article.release_date))[-1:]
older_article = articles.filter(release_date__lt=article.release_date)[:1]
return render_to_response(
'article/single%s.html' % extend,
locals(),
RequestContext(request)
)
- 最初のヒットで、現在の記事を取得します。
- 2番目と3番目のヒットは、前後の記事を取得することです
1 つのデータベース ヒットだけで同じ結果を得るソリューションはありますか?
結果:
1 つのクエリのみの新しいバージョン。
def single(request, slug):
articles = list(Article.objects.all())
for i, a in enumerate(articles):
if a.slug == slug:
article = a
if (i-1) >= 0:
newer_article = articles[i-1]
else:
newer_article = None
if (i+1) < len(articles):
older_article = articles[i+1]
else:
older_article = None
break
return render_to_response(
'article/single%s.html' % extend,
locals(),
RequestContext(request)
)