前提・実現したいこと
ブログ詳細ページに、コメントフォームを挿入したい。
ここに質問の内容を詳しく書いてください。
ブログの詳細ページにコメント入力フォームを作りたいのですが、フォームが作成されません。
1.blogアプリのdetail.htmlにcommentアプリのCreateviewでフォームを作成
2.htmlへレンダリングしたいが、レンダリングされない。
スキーマ
├── blog │ ├── __init__.py │ ├── __pycache__ │ ├── admin.py │ ├── apps.py │ ├── forms.py │ ├── migrations │ ├── models.py │ ├── tests.py │ ├── urls.py │ └── views.py ├── comment │ ├── __init__.py │ ├── __pycache__ │ ├── admin.py │ ├── apps.py │ ├── forms.py │ ├── migrations │ ├── models.py │ ├── tests.py │ ├── urls.py │ └── views.py ├── config │ ├── __init__.py │ ├── __pycache__ │ ├── asgi.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── dev │ ├── bin │ ├── include │ ├── lib │ └── pyvenv.cfg ├── manage.py ├── media │ └── media ├── static │ ├── css │ ├── fonts │ ├── images │ ├── js │ └── scss ├── templates │ ├── blog │ └── comment └── venv ├── bin ├── include ├── lib └── pyvenv.cfg
該当のソースコード
blog/views
blog/views.py
1from django.shortcuts import render 2from django.views.generic import ListView, CreateView, UpdateView,DetailView 3from .models import Blog 4from django.urls import reverse, reverse_lazy 5from .forms import BlogForm 6import logging 7 8logger = logging.getLogger(__name__) 9 10class BlogListView(ListView): 11 template_name = 'blog/list.html' 12 model = Blog 13 14class BlogCreateView(CreateView): 15 model = Blog 16 template_name = 'blog/create.html' 17 form_class = BlogForm 18 19 def get_success_url(self): 20 return reverse( 'blog:detail', kwargs={'pk': self.object.pk} ) 21
- comment/views
comment/views.py
1 2class CommentView(CreateView): 3 model = Comment 4 form_class = CommentForm 5 template_name = 'blog/detail.html' 6 7 def get_context_data(self, **kwargs): 8 context = super().get_context_data(**kwargs) 9 context.update({'comment_form': context}) 10 return context 11 12 13 14 def form_valid(self, form): 15 post_pk = self.kwargs['pk'] 16 post = get_object_or_404( Blog, pk=post_pk ) 17 18 # 紐づく記事を設定する 19 comment = form.save( commit=False ) 20 comment.target = post 21 comment.save() 22 23 # 記事詳細にリダイレクト 24 return redirect( 'blog:detail', pk=post_pk ) 25
detail.html
1 2 <div class="comment-form-wrap pt-5"> 3 <h3 class="mb-5">Leave a comment</h3> 4 5 <form method="post" action="#" class="p-5 bg-light">{% csrf_token %} 6 {{ comment_form }} #htmlへレンダリングされません。 7 8 <div class="form-group"> 9 <input type="submit" value="Post Comment" class="btn py-3 px-4 btn-primary"> 10 </div> 11 12 </form> 13 </div> 14 </div> 15 16
試したこと
contextをオーバライドした。
views.py
1 def get_context_data(self, **kwargs): 2 context = super().get_context_data(**kwargs) 3 context.update({'comment_form': context}) 4 return context
補足情報(FW/ツールのバージョンなど)
Django3
お手数ですが、ご教示いただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。