【发布时间】:2011-04-07 21:59:12
【问题描述】:
我正在创建小博客应用程序。我想返回帖子,以及(我的问题)上一个和下一个帖子,所以我可以将它们与帖子一起显示。我目前的决定非常糟糕,因为我不仅加载了所有 Post 对象,而且还将 QuerySet 转换为列表。这是来自views.py的sn-p:
def post(request, url):
try:
post = Post.objects.get(slug = url)
except Post.DoesNotExist:
raise Http404()
posts = Post.objects.all().order_by('-date')
index = list(posts).index(post)
if index > 0:
ppost = posts[index - 1] #previuos post
else:
ppost = None
if index < len(posts):
npost = posts[index + 1] #next post
else:
npost = None
if not post.visible:
raise Http404()
return render_to_response('post.html',
{'post': post, 'ppost': ppost, 'npost': npost},
context_instance=RequestContext(request))
这里是models.py:
class Post(models.Model):
slug = models.SlugField(unique=True)
subject = models.CharField(max_length=150)
abstract = models.CharField(max_length=300)
content = models.TextField()
author = models.ForeignKey(User)
date = models.DateTimeField(auto_now_add=True)
visible = models.BooleanField(default=False)
tags = models.ManyToManyField(Tag, blank = True, null = True)
def save(self, *args, **kwargs):
self.abstract = self.content[:297] + "..."
self.slug = slugify(self.subject)
super(Post, self).save(*args, **kwargs)
def __unicode__(self):
return self.subject
class Meta:
ordering = ['-date']
我会很感激任何架构想法,如何实现这个案例。实际上有任何想法:)。提前谢谢你
【问题讨论】:
-
模型中可能有上一个和下一个帖子?不知道...
标签: python django django-views