-1

I'm trying to create a detail view using function based view. This view must make visible only the already published posts and the non draft posts.

def singlePost(request, slug_post, slug_category):
    post_category = get_object_or_404(BlogCategory, slug_category=slug_category)
    if post_filter == BlogPost.objects.filter(draft=True):
        raise PermissionDenied
    if post_filter == BlogPost.objects.filter(publishing_date__gt=datetime.datetime.now()):
        raise PermissionDenied
    else:
        post_filter == BlogPost.objects.all()
    post_details = get_object_or_404(post_filter, slug_post=slug_post)
    category_post_details = BlogPost.objects.filter(post_category=post_category)
    context = {
        "post_category": post_category,
        "post_details": post_details,
        "category_post_details": category_post_details,
        }
    template = 'blog/reading/single_post.html'
    return render(request, template, context)

But when I use this I see this error message:

name 'post_filter' is not defined

How I can solve?

NB: the view works fine in that way

def singlePost(request, slug_post, slug_category):
    post_category = get_object_or_404(BlogCategory, slug_category=slug_category)
    post_details = get_object_or_404(BlogPost, slug_post=slug_post)
    category_post_details = BlogPost.objects.filter(post_category=post_category)
    context = {
        "post_category": post_category,
        "post_details": post_details,
        "category_post_details": category_post_details,
        }
    template = 'blog/reading/single_post.html'
    return render(request, template, context)
MaxDragonheart
  • 1,117
  • 13
  • 34

1 Answers1

1

Based on the information given, I would recommend using the following approach.

Use a single filter to get the criteria for your blog post and raise an error if it doesn't exists.

post_filter = BlogPost.objects.filter(draft=False,
                                      publishing_date__lt=datetime.datetime.now()):
if not post_filter.exists():
    raise PermissionDenied
else:
    post_details = get_object_or_404(post_filter, slug_post=slug_post)

Daniel Holmes
  • 1,952
  • 2
  • 17
  • 28
  • In this case even if the post doesn't exist for that particular slug or url it will give PermissionDenied but that's not the case. In your case it should give 404 error page not found. Only while accessing draft post, permission denied should show or for post due to be published. – Astik Anand Jul 15 '19 at 16:08