前提・実現したいこと
掲示板アプリに返信機能を追加したい
画像の返信ボタンを押すとコメントフォームに飛ぶようにしたいです。
発生している問題・エラーメッセージ
返信ボタンを押すと、画面にはHTTPエラー405と表示され、ターミナルには以下のエラーが出ます。
Method Not Allowed (POST): /comment/ Method Not Allowed: /comment/
該当のソースコード
models,views,urls,formは.pyファイル、postはhtmlファイルです。
models
1from django.db import models 2from django.utils import timezone 3 4# Create your models here. 5 6class Posts(models.Model): 7 8 9 class Meta(object): 10 db_table = 'posts' 11 12 13 text = models.CharField(verbose_name='本文', max_length=255) 14 created_at = models.DateField(verbose_name='作成日', default=timezone.now) 15 16 def __str__(self): 17 return self.text, self.created_at 18 19 20class Comment(models.Model): 21 22 """コメント.""" 23 name = models.CharField(max_length=255, blank=True) 24 text = models.TextField() 25 target = models.ForeignKey(Posts, on_delete=models.CASCADE) 26 created_at = models.DateTimeField(auto_now_add=True) 27 is_publick = models.BooleanField(default=False)
views
1 2from django.shortcuts import render 3from django.shortcuts import redirect, get_object_or_404 4 5# Create your views here. 6from django.views.generic import View 7from .form import WriteForm, CommentCreateForm 8from .models import Posts, Comment 9 10 11class IndexView(View): 12 def get(self, request, *args, **kwargs): 13 queryset = Posts.objects.all().order_by('-created_at') 14 return render(request, 'posts/post.html', {'posts': queryset}) 15 16 17index = IndexView.as_view() 18 19 20class WriteView(View): 21 def get(self, request, *args, **kwargs): 22 return render(request, 'posts/write.html', {'form': WriteForm}) 23 24 def post(self, request, *args, **kwargs): 25 form = WriteForm(request.POST) 26 post = form.save(commit=False) 27 post.save() 28 return redirect(to='posts:index') 29 30 31write = WriteView.as_view() 32 33 34class CommentView(View): 35 36 37 def create_comment(request, pk): 38 form = CommentCreateForm(request.POST) 39 if form.is_valid(): 40 comment = form.save(commit=False) 41 comment.target = get_object_or_404(Posts, pk=pk) 42 comment.save() 43 return redirect(to='posts:index') 44 45 context = { 46 'posts': Posts.objects.all(), 47 'form': form, 48 } 49 return render(request, 'templates/post.html', context) 50 51comment = CommentView.as_view() 52 53
form
1from django import forms 2from .models import Posts, Comment 3 4 5class WriteForm(forms.ModelForm): 6 class Meta: 7 model = Posts 8 fields = ('text',) 9 10class CommentCreateForm(forms.ModelForm): 11 12 class Meta: 13 model = Comment 14 fields = ('text',) 15
urls
1from django.urls import path 2from . import views 3 4app_name = 'posts' 5urlpatterns = [ 6 path('', views.index, name='index'), 7 path('write/', views.write, name='write'), 8 path('comment/', views.comment, name='comment'), 9]
post
1{% extends "base.html" %} 2{% block page_title %}post{% endblock %} 3{% block title %}Posts{% endblock %} 4{% block content %} 5{% for post in posts %} 6 7<div class="post"> 8 <p class="text">{{ post.text }}</p> 9 {{ post.created_at }} 10 <hr> 11 <form method="POST" action="{% url 'posts:comment' %}"> 12 {{ comment }} 13 <button type="submit" class="button">返信</button> 14 {% csrf_token %} 15 16 </form> 17</div> 18 19{% endfor %} 20{% endblock %}
補足情報(FW/ツールのバージョンなど)
python 3.6
django 2.2
です。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/24 07:48