快速问题 - 我不确定什么是正确的方式来处理这个问题。基本上我希望定义一个处理某些逻辑的自定义标签,然后返回所有具有is_featured字段设置为True的Post Post的所有帖子。我尝试了很多途径来完成这项工作,但都没有奏效。我最后coherant “猜测” 是以下几点:定制Django中的标签以过滤Post中的帖子
templatetags/blog_tags.py:
@register.inclusion_tag('blog/post/featured_posts.html')
def show_featured_posts(count=4):
"""Return 4 of the most recent posts (of model: 'Post') that has the variable is_featured set to True."""
if Post.is_featured:
featured_posts = Post.published.order_by('-publish')[:count]
return { 'featured_posts': featured_posts}
models.py(有用位):
class PublishedManager(models.Manager):
def get_queryset(self):
return super(PublishedManager, self).get_queryset().filter(status='published')
class Post(models.Model):
STATUS_CHOICES = (
('draft', 'Draft'),
('published', 'Published'),
)
POST_TYPES = (
('news', 'News'),
('feature', 'Feature'),
('review', 'Review'),
)
title = models.CharField(max_length=250)
slug = models.SlugField(max_length=250, unique_for_date='publish')
author = models.ForeignKey(UserProfile, related_name='blog_posts')
body = models.TextField()
lead_in = models.CharField(max_length=500, default='')
#These next items shall contain our development information for game reviews - this is much like the lead_in:
platform = models.CharField(max_length=1000, default='')
publisher = models.CharField(max_length=1000, default='')
developer = models.CharField(max_length=1000, default='')
release = models.DateTimeField(default=timezone.now)
is_featured = models.BooleanField(default=False)
#Out blog layout dictates each featurette has up to three scrolling images associated to it:
image_scroll_1 = models.ImageField(storage=site_media_upload_location, null=True, blank=True)
image_scroll_2 = models.ImageField(storage=site_media_upload_location, null=True, blank=True)
image_scroll_3 = models.ImageField(storage=site_media_upload_location, null=True, blank=True)
type = models.CharField(max_length=10,choices=POST_TYPES,default='review')
publish = models.DateTimeField(default=timezone.now)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
status = models.CharField(max_length=10,choices=STATUS_CHOICES,default='draft')
rating = models.PositiveSmallIntegerField(default=10)
wrap_header = models.CharField(max_length=250, default='')
wrap_up = models.TextField(default='')
disclaimer = models.TextField(default='')
objects = models.Manager()
published = PublishedManager()
tags = TaggableManager()
class Meta:
ordering = ('-publish',)
def __str__(self):
"""Return the state title of the post"""
return self.title
def get_absolute_url(self):
"""Get absolute_url path specific to this post."""
return reverse('blog:post_detail', args = [self.publish.year, self.publish.strftime('%m'), self.publish.strftime('%d'), self.slug])
def get_image(self):
"""Get upload_to path specific to this photo."""
return self.image.url
这就是一切,我想我需要包括 - 我有featured_posts.html
模板都准备好了,所以我不认为问题在于此。它纯粹在blog_tags.py
文件中。
你能告诉模板? – zaidfazil
@FazilZaid您好Fazil - 无需担心,只是实施了下面的答案,一切都在工作。无论如何,谢谢你的想法。 –