Django 2.1按发布日期过滤博客文章

时间:2018-11-05 00:50:01

标签: django python-3.x view

我刚刚构建了一个模型管理器来处理我的查询集的调整过滤器,以排除将来发布的帖子(发布> timezone.now.date)和Post.draft = True的帖子。

x$species <- gsub('\\s+', '', x$species)
y$species <- gsub('\\s+', '', y$species)

我能够在我的视图和模板中处理布尔型草稿字段。即,如果超级用户正在查看发布应用索引页面(发布列表),则可以看到一个标头标签,表明它是草稿:

帖子列表页面模板:

class PostManager(models.Manager):
    def active(self, *args, **kwargs):
        return super(PostManager, self).filter(draft=False).filter(publish__lte=timezone.now().date())

这是基于函数的列表视图的view.py ---您将看到“今天”(从上方)作为上下文变量:

<div class="card-body">
    {% if post.draft %}<h3>Staff Only: Draft</h3>{% endif %}
    {% if instance.publish > today %}<h3>Staff Only: Future Post</h3>{% endif %} 

我很好奇为什么我能够处理草稿设置为True的(从公共视图中排除)帖子,但不能处理使用我拥有的代码发布> timezone.now()。date()的帖子

这是我在models.py中发布的模型字段,用于更清晰:

def post_view(request):
    template_name = 'posts/index.html'
    today = timezone.now().date()

    queryset_list = Post.objects.active()
    if request.user.is_staff or request.user.is_superuser:                          
        queryset_list = Post.objects.all()

    paginator = Paginator(queryset_list, 5)
    page = request.GET.get('page')
    queryset = paginator.get_page(page)

    context = {
    'post_list': queryset,
    'today': today,
    }
    return render(request, template_name, context)

谢谢大家!

0 个答案:

没有答案