我写了一个小博客脚本作为django应用程序。我认为在单篇文章视图中我有很多要求。但我不知道如何减少它们。
我通过一个查询获得所有博客帖子。结果我得到一个查询集。有了这个我做了一些更多的动作。但是每次动作,django debbuger工具栏告诉我,它会一次又一次地击中数据库。
以下是观点:
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)
)
是否只有一个数据库可以获得相同的结果?
结果:
新版本只有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)
)
答案 0 :(得分:3)
您可以将其缩小为一个查询,如下所示:
articles = list(Article.objects.order_by('release_date'))
for index, art in enumerate(articles):
if art.slug == slug:
article = art
newer_article = articles[index+1]
older_article = articles[index-1]
break