the basic source files are here <https://pastebin.pl/view/a0a1fc38>:
https://pastebin.pl/view/a0a1fc38 and i am trying to do it in class based
view for further upgrade. My main project is written in class based view
and it will be easy to integrate for me.
views.py codes are give below:
from .models import Post,Comment
from .forms import CommentForm
from django.shortcuts import render, get_object_or_404
from django.views.generic import ListView,DetailView
from django.shortcuts import redirect,render, get_object_or_404
from django.http import HttpResponseRedirect
class PostList(ListView):
model=Post
template_name='home.html'
context_object_name='post_list'
queryset=Post.objects.all()
class PostDetail(DetailView):
model=Post
def get_queryset(self):
queryset = super(PostDetail, self).get_queryset()
post=Post.objects.all()
comments=Comment.objects.filter(post=post)
return queryset
def get_context_data(self, **kwargs):
context = super(PostDetail, self).get_context_data(**kwargs)
if request.method == "POST":
comment_form = CommentForm(request.POST or None)
if comment_form.is_valid():
comment=comment_form.save(commit=False)
comment.post=post
comment.save()
else:
comment_form = CommentForm()
context['post']=post.objects.all()
context['comments']=comments.objects.all()
context['comment_form']=comment_form()
template_name='Post_detail.html'
return render(request, template_name, context)
when i execute the runserver it shows NameError at /post/1/ name 'request'
is not defined
the models.py is:
from django.db import models
from django.contrib.auth.models import User
class Post(models.Model):
title = models.CharField(max_length=200, unique=True)
author = models.ForeignKey(User, on_delete=
models.CASCADE,related_name='blog_posts')
content = models.TextField()
def __str__(self):
return self.title
class Comment(models.Model):
post =
models.ForeignKey(Post,on_delete=models.CASCADE,related_name='comments')
name = models.CharField(max_length=80)
body = models.TextField()
reply=models.ForeignKey('Comment',on_delete=models.CASCADE,null=True)
def __str__(self):
return self.name
the function base view was:
def PostDetail(request,pk):
post = get_object_or_404(Post, pk=pk)
comments=Comment.objects.filter(post=post)
if request.method == "POST":
comment_form = CommentForm(request.POST or None)
if comment_form.is_valid():
comment=comment_form.save(commit=False)
comment.post=post
comment.save()
else:
comment_form = CommentForm()
context={
'post':post,
'comments':comments,
'comment_form':comment_form,
}
return render(request, 'post_detail.html', context)
that function base view was working fine but i am trying to convert it into
class based view so that i can use custommixin and other mixin later on.
how can i make it work?
please let me know. thanx in advance
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/17ba1d3b-8ed2-470f-9004-213357b2d403o%40googlegroups.com.