質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Q&A

解決済

1回答

1393閲覧

【Django】ブログ詳細ページに、コメントフォームを挿入したい。

Kantan.lab

総合スコア22

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

0グッド

0クリップ

投稿2020/09/26 09:27

前提・実現したいこと

ブログ詳細ページに、コメントフォームを挿入したい。

ここに質問の内容を詳しく書いてください。
ブログの詳細ページにコメント入力フォームを作りたいのですが、フォームが作成されません。
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
  1. 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

お手数ですが、ご教示いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

CreateViewのフォームは、formという変数に格納されます。なので、

HTML

1 2<form method="post" action="#" class="p-5 bg-light"> 3 {% csrf_token %} 4 {{ form }} 5</form> 6````{{ form }}`で表示できます。

投稿2020/09/26 22:33

編集2020/09/26 22:33
ForestSeo

総合スコア2722

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問