【问题标题】:how can I render a view only when a certain field is True? - Django仅当某个字段为 True 时,如何才能渲染视图? - 姜戈
【发布时间】:2020-07-07 01:00:34
【问题描述】:

我使用 DetailView 泛型类为基于 Django 的博客中的帖子创建了详细视图,到目前为止一切正常。然而,问题是我的帖子模型中有一个字段用于设置帖子的状态(活动、非活动、阻止),我只想在状态为活动时呈现详细视图。如果有人知道实现此目的的方法,请告诉我,我要求您尽可能详细。

views.py

from .models import Post
from django.views.generic import DetailView

class PostDetailView(DetailView):
    model = Post
    context_object_name = 'post'
    template_name = 'blog/post-detail.html'

    def get_context_data(self, **kwargs):
        context = super(PostDetailView, self).get_context_data(**kwargs)
        context['title'] = Post.objects.filter(slug=self.object.slug).first()
        return context

【问题讨论】:

  • 你能分享你当前的观点吗(抽象掉细节)

标签: python django django-models django-views django-class-based-views


【解决方案1】:

在您的DetailView 中,您可以过滤查询集,例如您可以使用:

from django.views.generic import DetailView

class PostDetailView(DetailView):
    queryset = Post.objects.filter(active=True)

    # …

DetailView 将根据 queryset 上的主键和/或 slug 检索元素,因此如果该元素不在过滤后的查询集中,那么您将检索 404 错误。

这里我们假设Post 模型有一个active 字段:

class Post(models.Model):
    # …
    active = models.BooleanField()
    # …

鉴于字段和值不同,您当然应该相应地过滤查询集。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 2021-03-10
    • 2021-07-28
    • 2020-08-17
    • 1970-01-01
    • 2021-03-05
    • 2019-02-02
    相关资源
    最近更新 更多